Páginas filhas
  • Guia de implementacao das APIs TOTVS

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

APIs Publicas são todas as APIs que podem ser acessadas por clientes externos aos times de desenvolvimento do fluig.

 

Erros

...

Estrutura de URLs

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.

Exemplo de URLs amigáveis:

https://fluig.totvs.com/api/users/{id}

https://fluig.totvs.com/api/workflow/{id}?action=execute

https://fluig.totvs.com/api/users/{alias}/communities

 

Exemplo de URLS NÃOamigaveis e que deve ser evitadas:

https://fluig.totvs.com/api/communty/listCommunities

https://fluig.totvs.com/api/communty/listCommunitiesWithRelevance

https://fluig.totvs.com/api/correlationquestion/create

https://fluig.totvs.com/api/user/create

https://fluig.totvs.com/api/user/delete

https://fluig.totvs.com/api/document/permissions?documentId={id}

 

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

 

Informações

Mais informações sobre a escolha do valor máximo de caracteres pode ser consultada em:

http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers/417184#417184

https://blogs.msdn.microsoft.com/ieinternals/2014/08/13/url-length-limits/

 

Métodos suportados

Endpoints devem usar os métodos HTTP adequados e devem respeitar a idempotência da operação.

Na tabela abaixo serão listados os métodos que DEVEMser suportados. Nem todos os endpoints devem suportar todos os métodos, mas os que usarem DEVEM respeitar a utilização conforme descrita.

MétodoDescriçãoIdempotente
GETRetorna o valor corrente do objeto.Sim
PUTSobrescreve o objeto ou cria um novo objeto quando aplicável.Sim
DELETEExclui o objeto.Sim
POSTCria um novo objeto ou submete um comando ao objeto.Não
HEADRetorna os metadados de um objeto em requisições do tipo GET. Endpoints que suportam o método GET PODEM suportar o método HEADER.Sim
PATCHAplica uma atualização parcial no objeto.Não
OPTIONSRetorna informações sobre uma requisição; ver abaixo para mais detalhes.Sim

Post

Operações do tipo POST DEVEM retornar a localização de qualquer objeto criado que tenha um identificador.

Por exemplo: Um serviço responsável por criar um usuário descrito como:

Bloco de código
languagetext
POST http://fluig.totvs.com/api/users

Deveria responder com algo similar a:

Bloco de código
languagetext
201 Created
Location: https://fluig.totvs.com/api/users/10

Onde 10 é o id do novo usuário criado.

 

PUT x PATCH

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

A utilização destes cabeçalhos não é obrigatória para todos os endpoints mas os que os usarem DEVEM obedecer as regras descritas aqui.

HeaderTipoDescrição
AuthorizationliteralCabeçalho usado para autorização das requisições
DatedataData e hora da requisição com base no calendário do cliente no formato estipulado em RFC 5322
Acceptenumerador de tipo de conteúdo

O tipo de conteúdo esperado para a resposta como por exemplo:

  • application/xml
  • text/xml
  • application/json
  • text/javascript

 

De acordo com os padrões HTTP, este valor é apenas uma dica para o servidor e as respostas PODEM retornar valores em formatos diferentes dos informados.

Accept-EncodingGzip, deflateEndpoints DEVEM suportar codificação GZIP e DEFLATE quando aplicável.
Accept-Language"en", "es", "pt"Especifica o idio preferencial da resposta. Endpoints DEVEM suportar e respeitar estes valores em casos em que uma mensagem é retornada ao usuário.
Content-Typetipo de conteúdoTipo do conteúdo informado na requisição.
   

 

Mensagens

Durante a construção das mensagens que serão transmitidas entre o cliente e endpoint deve-se garantir a consistência entre nomes de propriedades e objetos quando os mesmo fizerem parte de um mesmo grupo ou assunto.

 

Mensagens de retorno do endpoint para o cliente devem obedecer a estrutura definida para mensagens de erro ou mensagens de sucesso

Âncora
#Errors
#Errors

Mensagem de erro

Todos as respostas de erro (códigos HTTP 4xx e 5xx) devem retornar uma mensagem contendo obrigatoriamente os campos a seguir:

...