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.
Comentário: Detalhes sobre endpoints com processamento assincrono

...

VerboUsado paraTipo de operaçãoCódigo de sucessoDetalhes
POSTCriar uma entidadeSíncrona201Além do código de sucesso deve retornar a nova entidade criada.
PATCH ou PUTAtualizar uma entidadeSíncrona200Além do código de sucesso deve retornar a nova entidade atualizada.
POST, PUTCriar ou atualizar entidadeAssíncrona202

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 encontradaum recurso temporário que permita o acompanhamento do status da requisição. Por exemplo, considere o endpoint de cadastro assíncrono de usuários:

Bloco de código
languagetext
POST https://totvs.com/api/fluig/fdn/v1/users
{
 ...
}

DEVE retornar como resposta:

Bloco de código
languagetext
202 Accepted
Location: https://totvs.com/api/fluig/fdn/v1/usersqueue/10

Como escolher o método adequado

...

Informações
titleImportante

Os campos do JSON que representam data devem usar o formato definido no documento ISO-8601 no formato EXTENDIDO.

Mensagens de erro
Âncora
mensagensdeerro
mensagensdeerro

Para todas as mensagens que representam um erro (códigos HTTP 4xx e 5xx) deve-se retornar obrigatoriamente os campos a seguir:

...

Caso a regra de negócio necessitar de um retorno com conteúdo, este deve vir com HTTP Code 200 (OK) e com a entidade excluída sem expandir os sub-níveis.

Âncora
4xxversus5xx
4xxversus5xx
Código 4xx versus 5xx

Dividimos os erros em duas categorias: Erros de negócio ou requisição e Erros não esperados.

...


Informações
titlelimites

A API deve suportar a expansão de até dois níveis de propriedade de retorno, ex: prop1.prop2.prop3.

Nos casos em que o objeto tenha uma sub coleção o numero máximo de registros dessa coleção não deve ultrapassar 20 registros. Se houver a necessidade de retornar mais itens deve-se considerar criar um endpoint especifico para retornar a coleção com suporte a filtro, ordenação, etc.

Requisições Assíncronas.

Ao realizar um POST, PUT ou DELETE em um recurso que executa seu processamento de maneira assíncrona, o mesmo DEVE retornar o código 202 Accepted, com cabeçalho location apontando para um recurso temporário que permita o acompanhamento do status da requisição. 

Processando

Ao realizar o GET no recurso temporário, enquanto ainda estiver sendo processado, o mesmo DEVE retornar o código 200 e um JSON com a propriedade status definida como “pending”. Esse retorno PODE, e é uma boa prática, retornar a propriedade progress, informando o percentual de conclusão da operação solicitada.

Outra propriedade que PODE constar nesse retorno é a canCancel. Quandodefinida como “true”, significa que cancelar aquele processamento é permitido para o client. Quando inexistente, ou definida como “false”, o cancelamento não está permitido.


Bloco de código
languagejs
titleExmplo
{
                “status”: “pending”,
                “progress”: “30%”,
                “canCancel”: true
}


Para cancelar a execução do processamento, quando permitido, o client deve executar DELETE no recurso temporário.

Finalizada – Erro

Ao acessar o recurso temporário que finalizou seu processamento com erros, retorna o erro adequado, conforme definido em Mensagens de Erro  e Código 4xx versus 5xx


Finalizada – Sucesso

Ao acessar o recurso temporário que finalizou seu processamento com sucesso, o mesmo DEVE retornar o código 303 (See Other) com o cabeçalho Location, apontando para endereço do real recurso criado.

A deleção do recurso temporário não é obrigatória e PODE ser feita através de DELETE do client, ou através do próprio server, após um tempo determinado para expirá-lo. Nesse segundo caso, ao tentar acessá-lo DEVE retornar 410 (Gone).

Versionamento


As APIs devem ser versionadas sempre que alguma alteração quebrar o contrato entre o usuário e a plataforma, a versão deve estar presente na URI e deve estar no forma v{major.minor}.

...