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.