Jbuilder
Facilitar a criação de response em formato JSON a partir dos dados de modelos do Rails. Utilizado em APIs para serializar dados e construir documentos JSON complexos de maneira eficiente e legível.
Para os familiarizados de Java, é semelhante ao Serializable
.
- Jbuilder em Rails
json.data! @articles do |article|
json.extract! article, :id, :title, :content
end
- Serializable em Java
import java.io.Serializable;
public class Article implements Serializable {
private int id;
private String title;
private String content;
// Getters e Setters
}
ESSE POST É UMA CONTINUAÇÃO DO REspec Estrutura de Teste em Ruby on Rails
No CONTROLLER, em articles_controller.rb
:
Foi alterado a linha render JSON
- que está comentado na imagem acima - pois o controller não deve fazer duas coisas ao mesmo tempo, quebrando o princípio DRY (Don't Repeat Yourself).
- ANTES
render json: Article.all, status: :ok
Aqui, o JSON é gerado diretamente no controller, o que faz com que ele cuide de duas coisas: buscar os dados e formatar a resposta, o que quebra o princípio de responsabilidade única.
- DEPOIS
@articles = Article.all
Agora, o controller apenas busca os dados. A renderização e formatação JSON devem ser tratadas no view.
Na VIEW, em views >> api >> v1 >> articles >> index.json.jbuilder
:
OBS: Para funcionar corretamente, é importante deixar o namespace corretamente, dentro das pastas api/v1
Bizu para que eu me lembre: json.bloco/nome 'retorna'
Como assim?
Por exemplo, o meu JSON de nome batata, retorna ‘BaTaTa’ no meu body.
OUTRO EXEMPLO
json.array! @articles do |article|
json.id article
end
A função array! de JSON de Articles(do controller), faça que cada article retorne um bloco JSON chamado id
, e dentro desse bloco, está dizendo que para cada article, o Jbuilder
deve criar uma chave chamada id
.
Segue a imagem para melhor visualização:
RECOMENDAÇÃO
Ao invés de utilizar o json.array!
, utilize o json.data
para não haver atritos em utilizar outros componentes do jbuilder.
DEFINIR RETORNO SOMENTE DO TITLE DOS ARTICLES PARA O JSON
json.data @articles do |article|
json.title article.title
end
Segue a imagem para melhor visualização:
CRÉDITOS e RECOMENDAÇÃO: puts_dev
Esse post tem somente a finalidade de consolidar o que aprendi. Qualquer dúvida ou erro que tenha visto, pode me avisar!
Top comments (0)