Padrão DTO em Rest API com Golang

542 vues
Accéder directement au premier message non lu

igson medes

non lue,
1 janv. 2020, 12:49:4801.01.20
à Golang Brasil
Amigos, estou criando um API usando GoLang. Na verdade um conjunto de microservices. Nesse processo de criação surgiram algumas dúvidas.

Ei-la: 

Em minha API tenho uma Struct que retorna um conjunto de atributos no formato JSON. Acontece que dependendo do método a ser invocado, essa Struct é retornada contendo apenas alguns de seus atributos, não todos. No caso em questão, é usado DTO'S ou existe algum outro tipo de solução no Go pra ajudar solucionar esse tipo de problemática?

Grato desde já por quem ajudar.

JuciÊ Andrade

non lue,
3 janv. 2020, 05:27:2303.01.20
à Golang Brasil
Ola', Igson. Um prazer recebe-lo aqui no nosso grupo.

Nessa situacao voce tem algumas alternativas:
. voce pode retornar a propria string contendo o JSON. Dai' voce deserializa so' na hora em que for usar. Pra isso pode lancar mao de json.Unmarshal. O problema e' que se voce for fazer isso varias vezes pode acabar ficando trabalhoso;
. voce pode retornar um objeto pronto para uso, mas o chamador ja' tem que estar ciente que talvez haja campos nulos. Se o chamador tentar usar um campo nulo ele causara' um acesso invalido;
. voce pode retornar um dado do tipo interface{}, que pode ser qualquer coisa. Dai' o chamador se vira pra fazer o casting. A linguagem Go oferece um casting seguro e facil de usar, entao nao e' tao dramatico;
. dependendo da situacao, se o objeto for mais simples, sem estruturas aninhadas, voce pode optar por retornar um map. E' facil de produzir e tambem facil de usar', so' que ai todos os valores tem que ser do mesmo tipo, possivelmente string.

Outras coisas que voce deve levar em consideracao:
.e' voce mesmo quem vai escrever o chamador e o codigo chamado?
.se voce optar por retornar o objeto pronto, a estrutura do objeto sera' parte da assinatura do seu metodo. Sendo assim, se houver alguma alteracao e' possivel detectar automaticamente a necessidade de recompilar, com as verificacoes decorrentes. Ja' se voce resolver usar os outras formas voce nao tera a mesma seguranca e so' vai pegar eventuais problemas na hora de testar;

Espero que essas ideias possam te ajudar na sua tomada de decisao.

Um abraco e boa sorte no seu projeto.

Tobias Sette

non lue,
6 janv. 2020, 14:44:5706.01.20
à golang...@googlegroups.com

Nao tenho conhecimento suficiente em Go para lhe ajudar, mas, do ponto de vista da arquitetura, parece-me que está faltando um transformador para os dados contidos no DTO. Aqui [0] há um exemplo em PHP.

[0] https://fractal.thephpleague.com/transformers/

--

---
Você recebeu essa mensagem porque está inscrito no grupo "Golang Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para golang-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/golang-brasil/abd0c7e3-ea8e-45e9-8931-297402b41d05%40googlegroups.com.
-- 
Att,

Tobias

"If technology does not liberate all people for the pursuit of higher aspirations in human achievement, then all it's technical potential will be meaningless." - Jacque Fresco
signature.asc

Alex Sandro Garzao

non lue,
7 janv. 2020, 13:10:2007.01.20
à golang...@googlegroups.com
Oi pessoal,

Sobre os dados do JSON. No mapeamento da struct é possível sempre omitir determinados campos ou omitir quando não tiverem valores. Aqui (https://golang.org/pkg/encoding/json/#Marshal) tem mais detalhes...

Em relação as APIs, seguem alguns links:
* Aqui (https://medium.com/the-andela-way/build-a-restful-json-api-with-golang-85a83420c9da) tem um exemplo legal também. Mas ele armazena os dados em memória neste exemplo, ou seja, não persiste os dados em um DB ou similares...
* Aqui (https://imasters.com.br/back-end/criando-um-crud-completo-com-go-e-mongodb) já é utilizado o mongo para persistẽncia...

Abraços!





--
Atenciosamente,

------------------------------------------------------------------
Alex Sandro Garzão
E-mail: alexg...@gmail.com
Fone: (51) 98165 0486
LinkedIn: http://br.linkedin.com/in/alexgarzao/
------------------------------------------------------------------
Répondre à tous
Répondre à l'auteur
Transférer
0 nouveau message