Histórico da Página
...
Os caminhos definidos para cada endpoint devem ser de fácil leitura e significativos para o cliente para facilitar a sua descoberta e adoção. Os pontos abaixo DEVEM ser considerados ao criar uma URL:
- Ao referenciar uma entidade na URL ela DEVE estar no plural. Ex. /users ao invés de /user
- Evite caminhos com mais de 3 parâmetros pois isso dificulta a leitura e normalmente indica um problema arquitetural.
- O caminho DEVE apontar para um recurso e não para uma ação sobre a entidade, use os verbos HTTP para representar uma ação. Nos casos onde não exista um verbo apropriado a ação pode ser informada como parâmetro no caminho da url ou na url.
Exemplo de URLs amigáveis:
Descrever plural para entidades
Colocar exemplo de filtro e expansiveis Evitar url com mais de 3 PATH param para não dificultar leituraexpansíveis
- Entidade apresentada no plural e uso correto do parâmetro na url.
- https://fluig.totvs.com/api/users/{id}
- Ações sobre entidades no caminho da url e como parâmetro da url.
- https://fluig.totvs.com/api/workflows/{id}?action=execute
- https://fluig.totvs.com/api/workflows/{id}/send
- Relacionando entidades diretamente no caminho
- https://fluig.totvs.com/api/users/{alias}/communities
- https://fluig.totvs.com/api/communities/{id}/users
- URL com suporte a campos expansíveis (linkar para a sessão de campos expansíveis)
- https://fluig.totvs.com/api/users/{alias}?expand=prop1.subprop,prop2
Exemplo de URLS NÃOamigaveis e que deve ser evitadas:
- Redundância na definição da url
- https://fluig.totvs.com/api/communty/listCommunities
- Ordenação especificada na url
- https://fluig.totvs.com/api/communty/listCommunitiesWithRelevance
- Verbos definidos na url ao invés de usar o verbo HTTP e falta de pluralização no substantivo.
- https://fluig.totvs.com/api/correlationquestion/create
- https://fluig.totvs.com/api/user/create
- https://fluig.totvs.com/api/user/delete
- Identificador da entidade definido como parâmetro e não como caminho (na url)
- https://fluig.totvs.com/api/document/permissions?documentId={id}
No caso em que não existe um verbo adequado pode ser usado a "ação" na url. Desenha pra pessoas.
Apesar de o padrão definido no documento RFC 7230 da especificação do HTTP 1.1 não definir um tamanho maximo para a url nenhum endpoint do fluig deve ser identificado com uma url maior que 2000 caracteres para garantir que todos os navegares modernos sejam suportados
...
Método | Descrição | Idempotente | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
GET | Retorna o valor corrente do objeto. | Sim | ||||||||||
PUT | Sobrescreve o objeto quando aplicável. Por exemplo: O cliente gostaria de sobrescrever o usuário com novos valores:
| Sim | ||||||||||
DELETE | Exclui o objeto. | Sim | ||||||||||
POST | Cria um novo objeto ou submete um comando ao objeto. | Não | ||||||||||
HEAD | Retorna os metadados da requisição em casos em que o cliente não precisa do corpo das requisições do tipo GET. | Sim | ||||||||||
PATCH | PATH foi padronizado pelo IETF como o método usado para atualizar um objeto de forma incremental (ver RFC 5789), ou seja, apenas as propriedades informadas pelo cliente serão atualizadas. Por exemplo: O cliente gostaria de atualizar o nome do usuário e para isso vai usar o endpoint de atualização de usuários
O servidor deverá implementar o serviço de modo que apenas o nome do usuário seja atualizado e todas as outras propriedades mantidas Aplica uma atualização parcial no objeto. | Não | ||||||||||
OPTIONS | Retorna informações sobre um endpoint e sobre as operações suportadas por ele; ver abaixo para mais detalhes. | Sim |
Post
Descrever as situações de 200 201 202
Operações do tipo POST assíncronas DEVEM retornar a localização de qualquer objeto criado que tenha um identificador.
...
POST x PUT x PATCH
Deve-se atentar aos códigos de retorno para os tipos de operações definidos para usar estes métodos principalmente nos casos definidos abaixo:
Verbo | Usado para | Tipo de operação | Código de sucesso | Detalhes | |||||
---|---|---|---|---|---|---|---|---|---|
POST | Criar uma entidade | Síncrona | 201 | Além do código de sucesso deve retorna a nova entidade criada. | |||||
PATCH ou PUT | Atualizar uma entidade | Síncrona | 200 | Além do código de sucesso deve retorna a nova entidade atualizada. | |||||
POST, PATCH, PUT | Criar ou atualizar entidade | Assíncrona | 202 | O código 202 informa ao cliente que o serviço aceitou a requisição para processamento e que isso pode levar um tempo para concluir. Nesse caso o endpoint DEVE retornar o campo Location no cabeçalho da resposta apontando para onde a nova entidade poderá ser encontrada. Por exemplo, considere o endpoint de cadastro assíncrono de usuários:
|
...
|
...
DEVE retornar como responta |
:
|
Onde 10 é o id do novo usuário criado.
...
Apesar de ambos atualizarem um objeto é importante notar que existe uma diferença na implementação destes métodos.
PUT DEVE ser considerado uma substituição total do objeto, ou seja, caso o cliente deixe de enviar uma propriedade para ser atualizada ela será considerada nula e poderá inadvertidamente remover valores do objeto.
PATH foi padronizado pelo IETF como o método usado para atualizar um objeto de forma incremental (ver RFC 5789), ou seja, apenas as propriedades informadas pelo cliente serão atualizadas.
Padrões de cabeçalhos de requisição
...
- O cliente chamou um endpoint mas o servidor não pode responder por que estava sobrecarregado. Deve retornar o código 503 - Service Unavailable;
- O cliente chamou um endpoint para subir um documento mas não havia espaço em disco no servidor. Deve retornar o código 507 - Insufficiente Storage;
Dicas de como implmentar os métodos para tentar manter um padrão de implementação.