APIs REST - Dicas
básicas e boas práticas - II
![]() |
Hoje vamos continuar a apresentação de dicas básicas e das principais boas práticas que podemos usar para criar e usar APIs Restful, ou seja, aderentes ao estilo REST. |
Continuando a primeira parte do artigo veremos agora algumas dicas de boas práticas para as API Restful.
A formatação da URI
As APIs REST usam URIs (Uniform Resource Identifiers) para endereçar
recursos.
Pode parecer um detalhe pequeno mas a formatação da URI pode comunicar de forma clara o modelo de recursos da API, como por exemplo http://macoratti.net/api/agatha-christie/morte-no-nilo, ou pode ser muito difícil de decifrar como http://macoratti.net/api/68dd0-a9d3-11e0-9f1c-0800200c9a66.
Ao criar uma API REST devemos transmitir o modelo de recurso da API aos seus consumidores de forma clara e suscinta.
Como formatar os endpoints nas URIs ?
Aqui a primeira dica é não usar verbos nas URIs.
Porque não ??
Simplesmente porque os verbos HTTP devem ser suficientes para descrever a ação que está sendo executada no recurso.
Veja os endpoints definidos a seguir :
/getAllProducts |
/getAllProducts |
/updateProduct/12 |
/deleteProduct/12 |
/getProductById/3 |
/deleteClient/3 |
/updateCliente/3 |
Temos aqui um monte de endpoints cada um realizando uma tarefa e isso pode ficar ainda mais confuso.
A solução é tratar cada recurso usando um substantivo e o método HTTP como um verbo. Isso simplifica a sintaxe e é tudo que você precisa para realizar as mesmas tarefas:
- GET /products – retorna todos os produtos
- GET /products/8 – retorna o produto com id
igual a 8
- POST /products – inclui um novo produto e
retorna os detalhes
- DELETE /products/7 – remove o produto com id
igual a 7
- GET /clients/5/orders – retorna todos os
pedidos do cliente com id igual a 5
Mais simples, mais fácil de entender e mais preciso.
Mas devo usar os nomes dos recursos no singular ou no plural ?
GET product/2/ ou GET products/2
Aqui não existe uma regra rígida mas creio que usar os nomes no plural reflete melhor o fato de que podemos ter muitos endpoints.
Assim creio que para agradar a todos vale a seguinte regra: 'Seja consistente com a escolha que você fez'
Se usar os nomes no singular faça isso em toda a sua API:
GET product/2
GET product
POST product
Além disso devemos usar a barra invertida (/) para indicar uma relacionamento hierárquico entre os recursos. Exemplo: http://api.desenho/formas/poligonos/quadrilateros/quadrados
Os hífens (-) devem ser usados para melhorar a legibilidade dos URIs, melhornado a legibilidade dos nomes nos segumentos de caminho longo. Exemplo: http://api.exemplo.com/blogs/macoratti/posts/meu-primeiro-post
Já o sublinhado ( _ ) deve ser evitado pois dependendo da fonte usada o caractere sublinhado pode ficar oculto ou difícil de interpretar.
Quando conveniente, letras minúsculas são preferidas nos caminhos de URI, pois as letras maiúsculas às vezes podem causar problemas. A RFC 3986 define as URIs como diferenciando as maiúsculas das minúsculas, exceto os componentes do esquema e do host.
E para concluir não devemos incluir extensões de arquivos na URIs, visto que na web o caractere ponto é usado para separar as partes do nome do arquivo e da extensão de uma URI. Assim o tipo de mídia é informado no header Content-Type e não precisamos informar a extensão de um arquivo.
Retornar os detalhes dos erros no response body
Quando um servidor de API lida com um erro, é conveniente e recomendado retornar os detalhes do erro no corpo JSON para ajudar os usuários da API na depuração.
E quanto mais detalhes você incluir melhor, assim indicar quais campos foram afetados pelo erro é uma grande melhoria na sua API.
{
"error": "Dados inválidos ao atualizar o produto.",
"detail": {
"description": "Este campo deve ser informado."
}
}
|
Preste atenção ao Status Code
Ao projetar e
criar uma API Restful, fazemos a comunicação com o usuário da API usando
códigos de status HTTP
(status code), e, existem muitos códigos de status,
descrevendo várias respostas possíveis.
Mas quantos deles devemos usar ?
Deveríamos ter
um código de status estrito para todas as situações ?
Existem mais de 50 códigos de status definidos, e, aposto que você não
conhece todos de cor.
Você acha que
o usuário vai conhecer todos os código de status de erro ?
A maioria dos desenvolvedores está familiarizada com os códigos de status
mais comuns como:
Ao começar com
esses três, você já esta quase cobrindo a maioria das funcionalidades da sua
API REST.
Outros códigos mais usados são:
O importante e retornar o código de status significativo que descreva corretamente o tipo de erro mesmo que você já tenha incluído os detalhes de erro no body do response.
Assim se sua API faz um POST e faltou a informação de um campo a resposta não pode ser 200 OK , seria melhor um 400 Bad Request.
Outro ponto importante é usar os status code de forma consistente.
Por exemplo,
se você escolher que um endpoint POST retorne 201
Created em algum lugar, use o mesmo código de status para todos os
endpoint POST
Por quê ?
Porque os
usuários não precisam se preocupar qual método e em qual endpoint vai
retornar qual código de status em qual circunstâncias.
Portanto, seja consistente e, se você se afastar das convenções, documente
isso em algum lugar de forma clara.
Até o
próximo artigo.
"(Disse Jesus) Ainda um pouco, e o
mundo não me verá mais, mas vós me vereis; porque eu vivo, e vós vivereis."
João 14:19
Referências: