Introdução à API v0

A API disponibilizada inicialmente (v0) permite aceder a rotas para criação e edição de documentos das áreas comercial e de contabilidade. Quando se pretende utilizar rotas de contabilidade é necessário que a sessão esteja associada a um exercício contabilístico. Note-se que a sessão da API está associada a um utilizador do tipo Empresário, pelo que o acesso de leitura e escrita via API dependem das permissões que esse Empresário tenha aos Exercícios fiscais da empresa. A seleção do exercício usado na sessão da API está documentada na autenticação.

Nas páginas seguintes são descritas as rotas em maior detalhe, e apresentados exemplos da sua utilização.

A documentação Swagger (OpenAPI) para da versão inicial está disponível em: https://app.swaggerhub.com/apis/gitbook/APIv0/1.0arrow-up-right

Formato da API

A versão v0 da API foi desenvolvida com base na especificação de JSON:API version 1.0arrow-up-right. Na altura em que foi implementada a nossa API inicial, a especificação JSON:API 1.0 ainda estava em discussão e incluía a execução de operações através da extensão 'JSON Patch', que foi incluída parcialmente na API v0.

Ordenação

A ordenação de pedidos que devolvem coleções no data, pode ser indicada usando o parâmetro sort=<criteria>, de acordo com o formato de ordenação da JSON:APIarrow-up-right. Um exemplo de ordenação pelo campo date por ordem descendente, seguido de ordenação por document_type por ordem ascendente seria:

sort=-date,document_type

Paginação

A JSON:API é agnóstica em relação às estratégias de paginaçãoarrow-up-right implementadas no servidor. Pelo que optamos por implementar uma estratégia pelo número da página, ou seja usando os parâmetros page[number] e page[size], por exemplo:

page[number]=1&page[size]=10

Filtragem

Em relação a critérios de filtragem, a especificaçãoarrow-up-right apenas indica que deve ser usado o parâmetro filter. Na nossa implementação da API, optamos por usar este parâmetro num formato de texto livre, no formato filter="<texto>", ou como filtro específico de um campos, no formato filter[<field>]=<value>. Sendo possível combinar vários critérios de filtragem, como por exemplo:

filter[document_type]=FT&filter[status]=1&filter="documents.date>'2024-01-01'"

Quando se usa critérios pode ser conveniente saber o número de elementos que obedecem ao critério de filtragem (total) e o número total de elementos (grand-total) que seriam devolvidos sem filtragem. Essa informação pode ser obtida com o parâmetro totals=1, este parâmetro também pode ser usado com o valor zero sendo equivalente a não estar definido.

Assim, num pedido com totals=1 o número de elementos filtrados e sem filtragem são devolvidos no meta:

Inclusão de recursos relacionados

Quando se faz um pedido, podemos incluir na respostaarrow-up-right a informação dos recursos relacionados. Por exemplo quando se consulta um documento de vendas podemos pedir para incluir na resposta as linhas do documento, e o cliente assim como a morada deste:

Note-se que não é possível controlar a ordenação dos recursos incluídos, uma vez que não é relevante.

Exemplo de resposta:

Campos na resposta

Para optimizar a quantidade de dados enviados na resposta, é possível indicar no pedido quais são os campos que devem ser devolvidosarrow-up-right para cada tipo de recurso. Usando o exemplo anterior de consulta de um documento de vendas, com inclusão das linhas do documento, o cliente e a morada deste, podemos definir quais os campos a devolver para cada um destes recursos.

Assim, a resposta completa seria apenas:

Extensão JSON Patch

Embora a extensão JSON Patch, entretanto tenha sido descontinuadaarrow-up-right, a documentação desta extensão, imediatamente antes de ser descontinuada, e com base na qual foram implementadas operação na APIv0, encontra-se disponível no histórico da extensão JSON Patcharrow-up-right.

Caraterísticas dos pedidos

A utilização de operações foi implementada na API v0 sem que seja necessário definir os headers específicos de extensão. Ou seja, embora a especificação indique que é necessário identificar a extensão:

Os pedidos devem ser feitos de forma genérica indicando apenas que se está a usar uma API JSON:

Operações

São suportados os 3 tipos de operação previstos na especificação da extensão: "add", "replace" e "remove". Alguns exemplos de utilização estão na documentação de contabilização.

Last updated