API de consultas de CEP com Spring Boot,Swagger, JUnit5 e Cucumber
{
"swagger": "2.0",
"info": {
"description": "Documentação da API REST de consulta de CEP",
"title": "SPRING CEP REST API",
"contact": {
"name": "Thiago Kasper de Souza",
"email": "thiagokasper101@gmail.com"
}
},
"host": "localhost:8080",
"basePath": "/",
"tags": [
{
"name": "consulta-cep-controller",
"description": "Consulta Cep Controller"
}
],
"paths": {
"/v1/consulta-endereco": {
"post": {
"tags": [
"consulta-cep-controller"
],
"summary": "post",
"operationId": "postUsingPOST",
"consumes": [
"application/json"
],
"produces": [
"*/*"
],
"parameters": [
{
"in": "body",
"name": "consulta",
"description": "consulta",
"required": true,
"schema": {
"$ref": "#/definitions/Consulta"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/ResponseEntity"
}
},
"201": {
"description": "Created"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "Not Found"
}
}
}
}
},
"definitions": {
"Consulta": {
"type": "object",
"properties": {
"cep": {
"type": "string"
}
},
"title": "Consulta"
},
"ResponseEntity": {
"type": "object",
"properties": {
"body": {
"type": "object"
},
"statusCode": {
"type": "string",
"enum": [
"ACCEPTED",
"ALREADY_REPORTED",
"BAD_GATEWAY",
"BAD_REQUEST",
"BANDWIDTH_LIMIT_EXCEEDED",
"CHECKPOINT",
"CONFLICT",
"CONTINUE",
"CREATED",
"DESTINATION_LOCKED",
"EXPECTATION_FAILED",
"FAILED_DEPENDENCY",
"FORBIDDEN",
"FOUND",
"GATEWAY_TIMEOUT",
"GONE",
"HTTP_VERSION_NOT_SUPPORTED",
"IM_USED",
"INSUFFICIENT_SPACE_ON_RESOURCE",
"INSUFFICIENT_STORAGE",
"INTERNAL_SERVER_ERROR",
"I_AM_A_TEAPOT",
"LENGTH_REQUIRED",
"LOCKED",
"LOOP_DETECTED",
"METHOD_FAILURE",
"METHOD_NOT_ALLOWED",
"MOVED_PERMANENTLY",
"MOVED_TEMPORARILY",
"MULTIPLE_CHOICES",
"MULTI_STATUS",
"NETWORK_AUTHENTICATION_REQUIRED",
"NON_AUTHORITATIVE_INFORMATION",
"NOT_ACCEPTABLE",
"NOT_EXTENDED",
"NOT_FOUND",
"NOT_IMPLEMENTED",
"NOT_MODIFIED",
"NO_CONTENT",
"OK",
"PARTIAL_CONTENT",
"PAYLOAD_TOO_LARGE",
"PAYMENT_REQUIRED",
"PERMANENT_REDIRECT",
"PRECONDITION_FAILED",
"PRECONDITION_REQUIRED",
"PROCESSING",
"PROXY_AUTHENTICATION_REQUIRED",
"REQUESTED_RANGE_NOT_SATISFIABLE",
"REQUEST_ENTITY_TOO_LARGE",
"REQUEST_HEADER_FIELDS_TOO_LARGE",
"REQUEST_TIMEOUT",
"REQUEST_URI_TOO_LONG",
"RESET_CONTENT",
"SEE_OTHER",
"SERVICE_UNAVAILABLE",
"SWITCHING_PROTOCOLS",
"TEMPORARY_REDIRECT",
"TOO_EARLY",
"TOO_MANY_REQUESTS",
"UNAUTHORIZED",
"UNAVAILABLE_FOR_LEGAL_REASONS",
"UNPROCESSABLE_ENTITY",
"UNSUPPORTED_MEDIA_TYPE",
"UPGRADE_REQUIRED",
"URI_TOO_LONG",
"USE_PROXY",
"VARIANT_ALSO_NEGOTIATES"
]
},
"statusCodeValue": {
"type": "integer",
"format": "int32"
}
},
"title": "ResponseEntity"
}
}
}
curl --location --request GET 'http://localhost:8080/v2/api-docs'
curl --location --request POST 'localhost:8080/v1/consulta-endereco' \
--header 'Content-Type: application/json' \
--data-raw '{
"cep":"72874-555"
}'
Seu desafio é construir uma API REST de consulta de endereço e cálculo de frete para
um determinado CEP. O contrato da API deve ser conforme especificado abaixo:
Para a busca do endereço do CEP, você deve consultar a API VIA CEP, conforme a documentação https://viacep.com.br/. O valor do frete é fixo de acordo com as regiões do Brasil: Sudeste (R$ 7,85), Centro-Oeste (R$ 12,50), Nordeste (R$ 15,98), Sul (R$ 17,30) e Norte (R$ 20,83). O CEP é obrigatório e pode ser passado com ou sem máscara na entrada e se o CEP não for encontrado uma mensagem informativa deve ser retornada para o cliente. Requisitos para o desenvolvimento: Java 11 Spring boot API REST Template Documentação Swagger Testes unitários JUnit5 Testes automatizados utilizando cucumber Você deve criar um repositório publico no GIT e colocar o projeto nele. Lembre-se de utilizar as regras de controle de versionamento!
Essas instruções vão lhe mostrar como ter uma copia do projeto rodando localmente na sua máquina.
- Java 11 instalado
sudo apt install maven
mvn clean install
mvn spring-boot:run
mvn clean test
- JUnit5 - TDD
- Cucumber - BDD
- Swagger - Docs
- Spring_Boot - Server Framework
- Java - Main language
- @ThiagoKS-7 - Idea & Initial work