Isadora Rocha
Posted on September 17, 2024
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!
Posted on September 17, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.