Breaking Change na API: remoção da estratégia "best" e informações adicionais de "parent" no objeto "content"
Turma, aviso importante 🤝
Para quem está se integrando na API do TabNews, nos próximos dias teremos 2
Breaking Changes na sua interface pública e são mudanças simples, mas importantes para continuarmos o processo de lapidar os dados que são devolvidos de forma programática até chegar ao ponto de concluirmos a versão beta
dela.
Importante destacar que não temos urgência em fazer estas breaking changes, mas ao mesmo tempo não há porque esperar caso ninguém esteja diretamente usando esses parâmetros. Então caso ninguém esteja usando, iremos fazer o deploy das breaking changes nesta quinta-feira dia 25 de Agosto, mas caso você esteja usando e precise de mais tempo, sem problema algum e não hesite em deixar um comentário nessa publicação informando quanto tempo você precisa, combinado? 🤝
1) Remoção da strategy
best
no endpoint /api/v1/contents
Isto foi especificado nesta publicação no item 6)
que anunciava que a estratégia best
seria movida para relevant
, onde por enquanto as duas estão sendo disponibilizadas pela API, porém nesta quinta-feira iremos remover o acesso a best
.
Caso você possua algum client
que implementou a paginação dos conteúdos do TabNews, fortemente sugerimos você utilizar o cabeçalho Link
para que sua aplicação automaticamente utilize os links corretos (com a estratégia correta) daqui para frente. Isto significa que, se você utilizar este cabeçalho, você não precisará alterar sua aplicação para se adaptar a essa mudança. Caso queira mais informações sobre como isso funciona, sugiro ler essa publicação, é realmente muito massa aprender sobre isso.
2) Remoção das propriedades sobre parent
no objeto content
Hoje o objeto content
possui 4 propriedades relacionadas à publicação que está logo acima na árvore de conteúdos, que são:
parent_id
parent_title
parent_slug
parent_username
Exemplo: https://www.tabnews.com.br/api/v1/contents/gugadeschamps/f2385fcf-1385-4f70-ad54-6f842469a001
{
"id": "eabc571e-222c-4d1e-aae5-580469a9f54d",
"owner_id": "110cc974-4c56-4074-afbc-81ce22aa6013",
"parent_id": "121c55a2-1ab4-48f3-9192-f0dece2a6877",
"slug": "f2385fcf-1385-4f70-ad54-6f842469a001",
"title": null,
"body": "A cada atualização, eu fico impressionado com a quantidade de melhorias. \n\nFico muito contente com o carinho que todo mundo tem colocado nesse “pedaço especial de internet“!",
"status": "published",
"source_url": null,
"created_at": "2022-08-23T10:13:10.804Z",
"updated_at": "2022-08-23T10:13:10.804Z",
"published_at": "2022-08-23T10:13:10.876Z",
"deleted_at": null,
"owner_username": "gugadeschamps",
"parent_title": "Novas melhorias: Mais Performance e outras 6 melhorias 🎉",
"parent_slug": "novas-melhorias-mais-performance-e-outras-6-melhorias",
"parent_username": "filipedeschamps",
"tabcoins": 5,
"children_deep_count": 2
}
A proposta desta breaking change é manter apenas a propriedade parent_id
(que é uma propriedade que existe de fato dentro do objeto content
) e remover as 3 outras que são computadas para que elas possam ser acessadas por um novo endpoint /parent
, seguindo exatamente o mesmo princípio do novo endpoint /root
.
Então usando a mesma publicação acima, hoje você já consegue acessar o conteúdo raiz a partir de um outro conteúdo filho, independente da profundidade:
https://www.tabnews.com.br/api/v1/contents/gugadeschamps/f2385fcf-1385-4f70-ad54-6f842469a001/root
O mesmo princípio será utilizado para conseguir acessar o conteúdo que está 1 nível acima:
https://www.tabnews.com.br/api/v1/contents/gugadeschamps/f2385fcf-1385-4f70-ad54-6f842469a001/parent (ainda não disponível)
Os motivos desta alteração são três:
- Simplificar e otimizar o código, pois são feitos dois
JOIN
s para construir esta informação tanto na consulta, criação quanto na atualização dos conteúdos. - Parar de devolver esta informação que na maioria dos casos não é utilizada, como por exemplo na lista de conteúdos. Hoje os dados computados são utilizados apenas em situações onde você quer linkar uma coisa na outra, como por exemplo na página exclusiva de uma resposta, que na verdade é a única utilização hoje no
client web
do TabNews, pois até o sistema de notificações já está usando a estratégia nova doroot
. - Ter melhor controle quando um conteúdo parent está com o
status
emdeleted
, pois hoje estamos mostrando as informações de um conteúdo deletado por estas propriedades. Então a ideia é centralizar o acesso a estas informações em um único lugar e controlar o comportamento por lá.
Então seguindo o exemplo do /root
, quando o conteúdo raiz está com status deleted
e você tenta acessar ele, é retornado um 404
. Pensando aqui, não sei se esse é o melhor comportamento, pois talvez seja melhor retornar o objeto inteiro (incluindo a data em deleted_at
) mas as informações como title
e body
retornarem um valor fixo [Removido]
ou algo assim.
Acredito que será mais proveitoso e fácil para as interfaces se adaptarem a um status
deleted
com informações úteis (e não sensíveis) da publicação original do que retornar um 404
.
Em resumo: simplificar a interface pública do objeto, estancar complexidade e centralizar comportamento.
Conclusão
Qualquer comentário é bem vindo e vamos lapidando a API para que seja a melhor do Brasil no consumo de conteúdos sobre Programação e Tecnologia 🤝