Impl expansão dinâmica de campos na API #3809
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Mixin de Serializer que implementa expansão dinâmica de campos via parâmetros de query string:
expand: expande os campos informadosinclude: inclui apenas os campos informadosexclude: exclui os campos informadosExemplos:
Onde:
Ou seja:
e ainda:
expandpode ser usado para expansão direta, ou seja, campo1.sub_campo1 já expande campo1expand,includeeexcludepodem ser usados juntos na mesma requisiçãoincludeeexcludesó funcionam em subniveis se o campo pai estiver expandidoincludetem precedência sobreexcludee já remove todo o restoexcluderemove o campo do resultado final, mesmo que esteja emincludepageepage_size) e ordenação (o)podem ser usados normalmente para filtrar os resultados
Atenção:
inclusive devido a recursão infinita
por necessidade de controle mais refinado.
Exemplos reais em produção já sendo utilizados no fork cmjatai/cmj:
Exemplo de expansão única:

https://www.jatai.go.leg.br/api/materia/tramitacao/?expand=status
Expandindo dois campos em mesmo nível:

https://www.jatai.go.leg.br/api/materia/tramitacao/?expand=status;unidade_tramitacao_local
Expansão em níveis diferentes:

https://www.jatai.go.leg.br/api/materia/tramitacao/?expand=status;unidade_tramitacao_local.orgao
Expansão com inclusão em conjunto em terceiro nível:

https://www.jatai.go.leg.br/api/materia/tramitacao/?expand=status;unidade_tramitacao_local.orgao&include=unidade_tramitacao_local.orgao.id,nome,sigla
Expansão, exclusão e inclusão em níveis diferentes:
https://www.jatai.go.leg.br/api/materia/tramitacao/?expand=status;unidade_tramitacao_local.orgao&include=unidade_tramitacao_local.orgao.id,nome,sigla&exclude=unidade_tramitacao_local.link_detail_backend,comissao,parlamentar
Leitura completa deste link de exemplo:
os exemplos acima foram feitos só no endpoint /api/materia/tramitacao mas a dinamica já funciona na api inteira