Fluxo de Integração

Autenticação
A autenticação das APIs é realizada com a informação de um par de tokens no cabeçalho (header) das requisições. O seguinte par de tokens é esperado em cada requisição:
client_id: Identificação de acesso do cliente. Sua geração ocorre no momento da criação de uma APP pelo painel do desenvolvedor. Seu valor é único por aplicação e poderá ser utilizado tanto em Sandbox quanto em Produção.
access_token: Identificação do token de acesso, que armazena as regras de acesso permitidas ao Client ID. Sua geração ocorre com a operação de criação de Access Token e está vinculado ao Client ID.
Obtenção do Access Token
A geração desse access_token ocorre de forma processual, seguindo um fluxo de autenticação OAuth2 (Saiba mais sobre o fluxo OAuth2) para geração do access_token.
Protocolo de Transporte
Todas as informações trafegadas pelas APIs são realizadas através do protocolo HTTPS, que garante um canal é seguro e dispensa a criptografia dos tokens de forma manual. Saiba mais detalhes sobre a utilização do protocolo HTTPS.
Tecnologias e Padrões
REST
Arquitetura para a disponibilização de recursos através de sistemas distribuídos, popularmente utilizado sobre o protocolo HTTP. Mais detalhes em: https://www.w3.org/2001/sw/wiki/REST.
JSON
Padrão para descrição de dados utilizado para intercâmbio de informações entre sistemas, é mais simples e leve do que algumas alternativas de mercado, como XML. Mais detalhes em: https://www.w3.org/TR/html-json-forms/#introduction.
HTTP 1.1
Protocolo de transporte padrão, amplamente utilizado. Mais detalhes em: http://www.w3.org/Protocols/rfc2616/rfc2616.html ou http://www.ietf.org/rfc/rfc2616.txt.
UTF-8
Conjunto de caracteres padrão para comunicação entre sistemas distribuidos. Mais detalhes em: https://www.w3.org/International/questions/qa-choosing-encodings.
ISO-8601
Padrão de formato específico para dados do tipo date e hora.
Padrão: YYYY-MM-DDThh:mm:ss.sTZD Exemplo: 2013-06-28T08:54:00.000-03:00
Endpoints
Há apenas dois endpoints para acessar os serviços da API, um de Produção e outro de Sandbox. Enquanto sua aplicação estiver sendo desenvolvida, utilize sempre o endpoint de Sandbox e só altere para o de Produção quando sua aplicação for homologada e se token de produção for liberado. Abaixo são apresentados os dois endpoints utilizados para acessar a API:
URL de Produção | URL de Sandbox |
---|---|
https://api.zurich.com.br | https://api-qa.zurich.com.br |
Observação importante: Não se esqueça de incluir a versão da API antes do recurso, por exemplo: /v1, para a versão 1 da API.
Consultas
Paginação
A estratégia de paginação a ser utilizada na Zurich é o uso de parâmetros na “Query String” para o request e no “Header” para o response, onde:
Request:
_offset: Indica o registro inicial a ser retornado.
_limit: Indica a quantidade de registros a ser retornado.
Response:
contentRange: Total de registros existentes.
acceptRange: Quantidade máxima de registros que podem ser solicitado por requisição.
Request:
Method: GET URI: https://api.zurich.com.br/providers/v1/fieldServices?_offset=40&_limit=2 Headers: Content-Type → application/json
Response:
HTTP Status: 200 Headers: contentRange → 8.532 acceptRange → 100 Body: “fieldServices”: [ { “id”: 40, “description”: “Field Service 40” }, { “id”: 41, “description”: “Field Service 41” } ]
Observação: Neste exemplo, se o consumidor da API tivesse solicitado no parâmetro _limit um valor maior do que o especificado em acceptRange, que nesse exemplo é 100, o consumidor da API receberia um erro com HTTP Status Code 412 (Precondition Failed).
Códigos de Retorno
Status Code 2xx
Código | Descrição | Método HTTP | Response Body |
---|---|---|---|
200 (Ok) | Requisição bem sucedida. | GET | De acordo com a necessidade. |
201 (Created) | Requisição concluída e resultou em um novo recurso. | POST | De acordo com a necessidade. |
204 (No Content) | Requisição concluída, mas não é necessário retornar informações adicionais. | PUT, DELETE e PATCH. | De acordo com a necessidade. |
Status Code 4xx
Código | Descrição | Método HTTP | Response Body |
---|---|---|---|
400 (Ok) (Bad Request) |
A solicitação não pôde ser entendida pelo servidor devido à sintaxe malformada (utilizado quando o consumidor da API fez uma requisição passando uma mensagem com formato diferente do especificado pela documentação da API). | GET, POST, PUT, DELETE e PATCH. | String. |
401 (Unauthorized) | Requisição requer autenticação do usuário (utilizado quando o consumidor da API não passou uma credencial de acesso válida). | GET, POST, PUT, DELETE e PATCH. | String. |
403 (Forbidden) | Servidor entendeu o pedido, mas se recusa a aceitá-la (utilizado quando o consumidor da API passou sua credencial de acesso válida mas não tem permissão para acessar um recurso em específico). | GET, POST, PUT, DELETE e PATCH. | String. |
404 (Not Found) | Servidor não encontrou nada na URI (utilizado quando o consumidor da API tentou acessar uma API, recurso ou elemento que não existe). | GET, POST, PUT, DELETE e PATCH. | String. |
405 (Method not Allowed) | Método especificado não é permitido para o recurso (utilizado quando o método HTTP não é compatível com o recurso/elemento. Por exemplo: POST: /fornecedores/123, nesse caso, não é possível criar um fornecedor em um elemento). | GET, POST, PUT, DELETE e PATCH. | String. |
412 (Precondition Failed) | Condição prévia dada em um ou mais dos campos avaliada como falsa quando foi testado no servidor (utilizando, por exemplo, quando o consumidor da API fez uma requisição com um parâmetro obrigatório vazio, etc…). | GET, POST, PUT, DELETE e PATCH. | --- |
413 (Request Entity Too large) | A solicitação é maior do que o servidor está disposto ou capaz de processar (utilizado quando a mensagem passada pelo consumidor da API é maior do que a API está configurada para aceitar). | GET, POST, PUT, DELETE e PATCH. | --- |
415 (Unsupported Media Type) | Servidor está se recusando a atender o pedido porque a entidade do pedido está em um formato não suportado pelo recurso solicitado (utilizado quando o consumidor está passando ou tentando consumir um media type não suportado pela API). | GET, POST, PUT, DELETE e PATCH. | --- |
422 (Unprocessable Entity) | O pedido foi bem formado, mas não pôde ser seguido devido a erros semânticos (utilizado para o caso de algum erro de negócio, por exemplo, tentativa de excluir um recurso de campo que está atendendo um chamado). | GET, POST, PUT, DELETE e PATCH. | --- |
429 (Too many requests) | Usuário enviou muitas solicitações em um determinado período de tempo (utilizado quando o consumidor da API fez mais requisições do que é permitido para ele ou para a API). | GET, POST, PUT, DELETE e PATCH. | --- |
Status Code 5xx
Código | Descrição | Método HTTP | Response Body |
---|---|---|---|
500 (Internal Server Error) | Servidor encontrou uma condição inesperada que impediu de cumprir o pedido (utilizado em caso de erros inesperados na implementação da API). | GET, POST, PUT, DELETE e PATCH. | String. |
502 (Bad Gateway) | Servidor, enquanto age como um gateway ou proxy, recebeu uma resposta inválida (utilizado em casos de erros inesperados no Gateway de APIs). | GET, POST, PUT, DELETE e PATCH. | String. |
504 (Gateway Timeout) | O servidor, enquanto age como um gateway ou proxy, não recebeu uma resposta do servidor no tempo especificado (utilizado quando a implementação da API demorou mais tempo do que era esperado para responder). | GET, POST, PUT, DELETE e PATCH. | String. |
Erros de Autenticação
Alguns erros serão tratados durante a autenticação dos Tokens. Abaixo a lista dos erros:
Tipo de erro | Descrição |
---|---|
Ausência de um dos Tokens | Os dois Tokens devem ser passados em todas as requisições. Caso um deles esteja ausente, será retornado o erro 401 Unauthorized |
Token inexistente/errado | Se qualquer um dos Tokens passados não existir ou estiver com algum erro (caso tenha sido alterado), será retornado o erro 401 Unauthorized |
Tokens revogados (inválidos) | Se qualquer um dos Tokens tiver sido revogado ele será considerado inválido e será retornado o erro 403 Forbidden |
Para os erros de ausência de um dos tokens e/ou token inexistente/errado, medidas podem ser tomadas do lado do desenvolvedor para validar se as informações que estão sendo passadas estão válidas. Para o erro de tokens revogados (inválidos) a única ação cabível será solicitar um novo token.