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.

...

Bloco de código
languagejs
GET http://totvs.com.br/api/fluig/fdn/v1/users/10

{
  _expandables: ["Permissions"],
  name: "John",
  surname: "Doe",
  age: 18,
  country: US,
  permissions: {}
}


Caso os únicos campos interessantes para o cliente sejam o "name" e "age" ele pode reduzir a quantidade de dados usando o parâmetro fields. Ex:

...

Indicamos o uso de campos expansíveis para todos os endpoints que possuam subníveis, todavia sua aplicação deve ser precedida da análise da equipe de negócio e com vistas a usabilidade. E devem retornar os campos retraídos a menos que especificado na requisição através do parâmetro de url expand.

As entidades de retorno devem obedecer as regras a seguir:

...

.

campo _expandables é uma lista com o nome de cada uma das propriedades que podem ser passadas na url para que o endpoint inclua na resposta.


Informações
titleVerbos HTTP x parâmetros expansíveis
A técnica de parâmetros expansíveis se aplica a todos os verbos HTTP onde o corpo contenha estruturas passíveis de retração (listas ou objetos). Por exemplo, se num endpoint usando POST o retorno contenha, no corpo, um objeto contendo uma lista, esta deve vir retraída e o atributo deve constar no parâmetro _expandables.

...

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


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

Caso o cliente queira expandir as propriedades, ele deve então fazer uma requisição informando o parâmetro expand na url e passando como valor uma lista separada por virgula (,) dos campos exatamente como descritos no campo _expandables.

Nota
titleAtenção

Apenas o primeiro nível das propriedades deve ser expandido, ou seja, se o objeto expandido tiver propriedades expansíveis elas devem vir retraídasnão serão retornadas.

Por exemplo, no cenário em que o cliente gostaria de expandir as comunidades da entidade usuário:

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

{
        _expandables: ["permissions", "detailedInformation"]  # refere-se aos atributos do objeto pai (1o nível)
        id: 10
        name: "Usuário"
        age: 25
        permissions: []  # permissões do usuário
        communities: [
            {
                _expandables: ["Permissions"],   # refere-se ao atributo permissions deste objeto-filho (2o nivel)
                name: "Vendas",
                photoUrl: "https://totvs.com/communities/1/photo",
                permissions: {}  # permissões da comunidade 'Vendas'photoUrl: "https://totvs.com/communities/1/photo"
            },
            {
                _expandables: ["permissions"],  # refere-se ao atributo permissions deste objeto-filho
                name: "Outra comunidade",
                photoUrl: "https://totvs.com/communities/2/photo",
                permissions: {}  # permissões da comunidade 'Outra comunidade'
            }
        ]
        detailedInformation: { }
}

Note que as propriedades do objeto expandido devem vir retraídas não são retornadas por padrão. O cliente pode solicitar que as propriedades dos objetos sejam expandidas separando as sub-propriedades com ponto (.). Usando o exemplo acima, o usuário gostaria de expandir as permissões das comunidades da entidade usuário:

...

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

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


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 é recomendável que o número máximo de registros dessa coleção não ultrapasse 20 registros. Se houver a necessidade de retornar mais itens, 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.

Informações
titleAtenção

A implementação do modelo assíncrono não é obrigatório. A opção por este modelo deve basear no tempo e recurso necessário para o processamento de uma 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


...