ENDPOINTS DOS SERVIÇOS
• Padrão de nomenclatura
Sempre utilizar plural ao disponibilizar o recurso:
Não usar: GET /orgao, usar GET /orgaos.
Sempre utilizar minúsculo nos recursos:
Não usar: GET /Orgaos, usar GET /orgaos.
Sempre utilizar substantivos nos recursos CRUD:.
Não usar: GET /orgaos/consultar, usar GET /orgaos.
Não usar: POST /orgaos/incluir, usar POST /orgaos.
Não usar: PUT /orgaos/CELEPAR/alterar, usar PUT /orgaos/CELEPAR.
Não usar: DELETE /orgaos/CELEPAR/excluir, usar DELETE /orgaos/CELEPAR.
Obs.: Não utilizar camelCase, PascalCase, snake_case ou kebab-case nos recursos.
• Definição de recursos
A raiz do recurso deve retornar uma coleção:
O recurso GET /orgaos deve retornar um lista de órgãos.
Se desejar obter um recurso especifico, utilizar o nível seguinte especificando seu identificador único:.
O recurso GET /orgaos/CELEPAR deve retorna o órgão CELEPAR.
• GET /orgaos -> Retorna uma lista de órgãos.
• GET /orgaos/CELEPAR -> Retorna o órgão de código CELEPAR.
• POST /orgaos -> Cria um órgão.
• PUT /orgaos/CELEPAR -> Atualiza o órgão CELEPAR.
• DELETE /orgaos/CELEPAR -> Remove o órgão CELEPAR.
• Relacionamento filho
Se existir alguma tabela filho do recurso, eles devem estar mapeados para o mesmo endpoint:
• GET /orgaos/CELEPAR/locais -> Retorna uma lista de locais do órgão CELEPAR.
• GET /orgaos/CELEPAR/locais/CELEP/COS-B3 -> Retorna o local CELEP/COS-B3 do órgão CELEPAR.
• POST /orgaos/CELEPAR/locais -> Cria um novo local para o órgão CELEPAR.
• PUT /orgaos/CELEPAR/locais/CELEP/COS-B3 -> Atualiza a local CELEP/COS-B3 do órgão CELEPAR.
• DELETE /orgaos/CELEPAR/locais/CELEP/COS-B3 -> Remove o local CELEP/COS-B3 do órgão CELEPAR.
Obs.: Evitar que os endpoints tenham mais de 3 níveis, por exemplo: /nivel1/{codigo}/nivel2/{codigo}/nivel3/{codigo}.
• Ações
Frequentemente é necessário realizar operações que diferem das operações normais de CRUD. Neste caso deve-se utilizar verbos para nomear operações de ação.
Obs.: Os serviços de ações são sempre serviços PUT.
Por exemplo:
• PUT /protocolos/{protocolo}/tramitacoes/bloquear
• PUT /volumes/{protocolo}/documentos/{codigo}/cancelar
ESCOPOS DA CENTRAL DE SEGURANÇA
• Padrão dos escopos
Os escopos da Central de Segurança devem acompanhar o endpoint do serviço.
Por exemplo, para o serviços CRUD:
• GET /protocolos/{protocolo}/anexos -> spiserv.protocolos.anexos.consultar
• GET /protocolos/{protocolo}/anexos/{codigo} -> spiserv.protocolos.anexos.consultar
• POST /protocolos/{protocolo}/anexos -> spiserv.protocolos.anexos.incluir
• PUT /protocolos/{protocolo}/anexos/{codigo} -> spiserv.protocolos.anexos.alterar
• DELETE /protocolos/{protocolo}/anexos/{codigo} -> spiserv.protocolos.anexos.excluir
Obs.: Serviços de listar (retornam uma lista de determinado recurso) e de consultar (retorna um determinado recurso em específico) devem ter o mesmo escopo.
Para os serviços de ações:
• PUT /protocolos/{protocolo}/tramitacoes/bloquear -> spiserv.protocolos.tramitacoes.bloquear
• PUT /volumes/{protocolo}/documentos/{codigo}/cancelar -> spiserv.volumes.documentos.cancelar
Alguns serviços podem ter o mesmo escopo para todos os endpoints, pois não faria sentido ter escopos diferentes, o que só aumentaria a complexidade do uso.
Por exemplo:
• GET /localidades/paises -> spiserv.localidades.consultar
• GET /localidades/estados -> spiserv.localidades.consultar
• GET /localidades/estados/PR/municipios -> spiserv.localidades.consultar
TIPOS DE PARÂMETROS
• Parâmetros utilizados pelo webservice do eProtocolo
Existem quatro tipos diferentes de parâmetros aceitos pelo spi-servicos:
• Path Parameters
Os parâmetros de caminho são partes variáveis de um caminho de URL. Eles geralmente são usados para apontar para um recurso específico dentro de uma coleção.
Exempo: /orgaos/CELEPAR.
• Header Parameters
Esses parâmetros são apresentados no cabeçalho da solicitação e geralmente estão relacionados à autorização, como tokens.
Exemplo: consumerId: SPIWEB
• Query Parameters
Os parâmetros de consulta são o tipo de parâmetro mais comum. Eles aparecem no final do URL de solicitação após um ponto de interrogação. Os parâmetros de consulta podem ser obrigatórios e opcionais.
Exemplo: /orgaos?ativo=true
Obs.: Os query parameters devem ser utilizados via de regra para os serviços com método GET. Os demais serviços, devem usar os parâmetros do tipo body parameters.
Exceto quando o parâmetro não esteja diretamente relacionado com o conteúdo do recurso e sim com a forma de requisição, como o parâmetro assincrono, por exemplo.
• Body Parameters
Eles estão incluídos no corpo da solicitação e são usados para enviar e receber dados por meio da API.
Exemplo: {"codigoOrgao": "CELEPAR", "nomeOrgao": "Companhia de Tecnologia da Informação e Comunicação do Paraná"}
Obs.: Manter os campos sempre do tipo string, evitar usar campos do tipo inteiros ou do tipo data. Exceto quando for imprescindível a utilização de campo diverso, como o campo binário para o upload de arquivos.
O retorno dos campos deve sempre ocorrer com campos do tipo string. O nome dos campos do body parameters deve ser camelCase.
RESPOSTAS DAS REQUISIÇÕES
• Respostas das requisições
O retorno das requisições deve ser preferencialmente em formado JSON. Inclusive as mensagens de erro de negócio, devem seguir o mesmo padrão.
Exemplo: { "message": "Detalhamento da mensagem de erro de negócio" }
Em alguns casos, quando o serviço somente realiza uma verificação, pode ser retornado apenas um text/plain com o valor do boolean (true ou false).
No eProtocolo, os serviços com escopo com final ".validar" funcionam desta forma, retornando um boolean em vez de um JSON.
• Códigos de respostas das requisições
Quando o servidor recebe uma solicitação HTTP, o cliente deve saber o resultado da ação. Se houve sucesso ou falhou. Os códigos de status HTTP são vários códigos padronizados, com várias explicações em vários cenários.
O servidor sempre deve retornar o código de status correto.
A seguir estão as categorias dos códigos HTTP:
• 2xx - Status de sucesso
• 3xx - Categoria de redirecionamento
• 4xx - Erro no cliente
• 5xx - Erro no servidor
Abaixo uma tabela de quando utilizar cada um dos response status.
2xx - Status de sucesso
• 200 Ok -> Retorno que representa sucesso.
• 201 Created -> Indica que um recurso foi criado. Utilizado para a resposta do POST. Retornar o header Location indicando o GET dessa informação.
• 202 Accepted -> Indica que o servidor aceitou a request. Utilizado para retorno de requisições assíncronas.
• 204 No Content -> Representa que a request foi processada com sucesso, mas não há conteúdo para ser retornado.
3xx - Categoria de redirecionamento
• 301 Moved Permanently -> Indica que o serviço foi descontinuado e foi movido permanentemente para outra URL. Retornar o header Location indicando o GET do novo serviço.
4xx - Erro no cliente
• 400 Bad Request -> Indica que uma condição do serviço não foi satisfeita.
• 401 Unauthorized -> Indica que o cliente não está autenticado e não tem autorização para acessar o recurso.
• 403 Forbidden -> Indica que o cliente está autenticado e a requisição é válida. Porém o cliente não tem permissão de acesso naquele recurso.
• 404 Not Found -> Representa que o recurso não foi localizado.
• 405 Method Not Allowed -> Indica que o método é diferente do esperado. Por exemplo: o serviço espera o método GET, mas está sendo passado o método POST.
• 406 Not Acceptable -> Indica que o servidor não pode produzir uma resposta aceitável. Por exemplo, o serviço retorna um text/plain, mas o cliente espera um application/json.
• 415 Unsupported Media Type -> Representa que o formato do payload não é um formato suportado. Por exemplo, o serviço espera um body parameter, mas ele não é enviado.
• 429 Too Many Requests -> Indica que a quantidade de requisições simultâneas foi excedida. Tentar novamente mais tarde ou restringir a consulta.
5xx - Erro no servidor
• 500 Internal Server Error -> Indica houve uma falha não esperada no servidor e que este não conseguiu processar a requisição. Entrar em contato com o analista do spi-servicos.
• 503 Service Unavailable -> Indica que o servidor está indisponível. Entrar em contato com a equipe de infraestrutura.
• 504 Gateway Timeout -> Indica que a requisição excedeu o tempo máximo de espera. Tentar novamente mais tarde, restringir a consulta ou utilizar as requisições assíncronas.