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.

...

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/

Agrupamento

PRECISAMOS FAZER UMA POC TESTANDO VARIOS JARS E UM WAR PADRE

  • /me
  • /por card?

Coleções

Ordenação

Ordenação usando parametro order precedido de + para crescente (padrao) e - decrescente

Filtros

Marcelo - pesquisar schin|skin|scan|etc filter. mas tem que ser via get provavel que com q param;

 Paulo - Vai procurar um framework que faça o parse dessa string.

Paginação

Parametros page  e pageSize e deve retornar um hasNext indicando se existe uma nova página.

Métodos suportados

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

...

MétodoDescriçãoIdempotente
GETRetorna 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:

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

{
  name: "",
  age: 20,
  ...
}
Informações
titleImportante

Caso o cliente NÃO informe alguma propriedade para ser atualizada está DEVE ser considerada nula. Está informação DEVE estar clara na documentação do método para que o cliente não há utilize inadvertidamente, ou pode-se optar por não implementá-la.

Sim
DELETEExclui o objeto.Sim
POSTCria um novo objeto ou submete um comando ao objeto.Não
HEADRetorna 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

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

{
  name: "Novo nome do usuário"
}

O servidor deverá implementar o serviço de modo que apenas o nome do usuário seja atualizado e todas as outras propriedades mantidas.

Não
OPTIONSnao vai terOPTIONSRetorna informações sobre um endpoint e sobre as operações suportadas por ele; ver abaixo para mais detalhes.Sim

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:

...

Formato das mensagens de resposta

Precisamos decidir se vamos suportar XML E Json ou apenas um deles.Só JASÃO

 

JSON DEVE ser o formato padrão para mensagens e as propriedades destas mensagens DEVEM ser escritas usando camelCase.

...

  1. O cliente chamou um endpoint mas o servidor não pode responder por que estava sobrecarregado. Deve retornar o código 503 - Service Unavailable;
  2. 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;

Mensagens de sucesso

Mensagens de sucesso

Validar o generics com a documentação do swagger.

Bloco de código
languagejs
{
  ...
  hasNext: se for lista
  
  content: {}
Bloco de código
languagejs
{
}

 

Parâmetros expansíveis

Todos os endpoints DEVEM respeitar e suportar os campos expansíveis. E DEVEM retornar os campos retraídos a menos que especificado na requisição atráves do parâmetro de url expand.

...

  • Todas as propriedades que representam listas ou objetos DEVEM vir retraídas por padrão e DEVEM usar a notação de lista vazia (Ex.: [] ).
  • Todas as propriedades que representam objetos DEVEM vir retraídos e usar a notação de objeto sem propriedades. (Ex.: {} )

...

Por exemplo, a entidade usuário possui propriedades que apontam para suas permissões, comunidades e detalhes e portanto estas dem devem estar retraídas:

 

Bloco de código
languagejs
POSTGET https://fluig.totvs.com/api/users/10

{
  _expandables: ["permissions", "communities", "detailedInformation"],
  id: 10,
  name: "Usuário",
  age: 25,
  permissions: [],
  communities: [],
  detailedInformation: {},
  ...
}

...

Bloco de código
languagejs
POSTGET https://fluig.totvs.com/api/users/10?expand=communities

{
  _expandables: ["permissions", "detailedInformation"],
  id: 10,
  name: "Usuário",
  age: 25,
  permissions: [],
  communities: [{
    _expandables: [permissions],
    name: "Vendas",
    photoUrl: "https://fluig.totvs.com/communities/1/photo",
    permissions: {}  
  }, {
    _expandables: [permissions],
    name: "Outra comunidade",
    photoUrl: "https://fluig.totvs.com/communities/2/photo",
    permissions: {}  
  }],
  detailedInformation: {},
  ...
}

...

Bloco de código
languagejs
POSTGET https://fluig.totvs.com/api/users/10?expand=communities.permissions

{
  _expandables: ["permissions", "detailedInformation"],
  id: 10,
  name: "Usuário",
  age: 25,
  permissions: [],
  communities: [{
    name: "Vendas",
    photoUrl: "https://fluig.totvs.com/communities/1/photo",
    permissions: {
      isAdmin: true,
      canView: true
    }  
  }, {
    name: "Outra comunidade",
    photoUrl: "https://fluig.totvs.com/communities/2/photo",
    permissions: {
      isAdmin: true,
      canView: true
    }  
  }],
  detailedInformation: {},
  ...
}


Versionamento

  • API interna deve seguir esse padrão, mas é independe do versionamento. Deve estar documentado (tecnica) para as novas.
  • Validar como passar a versão URL ou header. Testar com o Paulo.

Dicas de como implementar os métodos para tentar manter um padrão de implementação.

Documentação

  • Tem que sair com swagger (json e documentação)