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.0
Formato da API
A versão v0 da API foi desenvolvida com base na especificação de JSON:API version 1.0. 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:API
.
Um exemplo de ordenação pelo campo date
por ordem descendente, seguido de ordenação por document_type
por ordem ascendente seria:
Paginação
A JSON:API é agnóstica em relação às estratégias de paginação 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:
Filtragem
Em relação a critérios de filtragem, a especificação 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:
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 resposta 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 devolvidos 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 descontinuada, 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 Patch.
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