Projeto para criação de RESTful API para serviço de carrinho de compras
O aplicativo consiste serviço de carrinho de compras em arquitetura de REST API.
Apesar de ser uma solução padrão e simples, optou-se por implementar este projeto como um RESTful API server, em arquitetura Model-View-Controller (MVC), para demonstrar a robustez e a flexibildiade do framework Spring Data REST.
As tecnologias selecionadas, portanto, foram:
- Java versão 11;
- frameworks Spring Data REST e Spring Data JPA;
- e base de dados embutida Apache Derby.
A escolha do framework Spring Data REST deveu-se, principalmente, pela facilidade de criar serviços CRUD, automaticamente a partir dos modelos e da interface CrudRepository
.
Java >= 11
;Gradle >= 6
;cURL
ou outra ferramenta de teste de REST APIs.
Apenas é necessário o Java (versão >=9) instalado para utilização do Apache Derby. Porém, como, neste projeto, foi slecionada sua versão embedded, não é necessário nenhum setup de ambiente.
Serão listadas aqui as possíveis interações com o aplicativo via cURL
, mas seria factível também a utilização de web browsers ou outras ferramentas de desenvolvimento Web, conforme mencionado acima.
Como anteriormente disposto, é necessária a utilização de um Java Runtime Environment a partir da versão 11, visto que o serviço está "empacotado" como um arquivo jar
a ser executado de forma standalone.
A melhor e mais segura maneira de executar o serviço de forma encapsulada, sem preocupação com dependências e classpaths, é através do utilitário Gradle, como segue.
Após seu download, o pacote jar
acima deve executado como:
./gradlew buildRun
O serviço estará disponível no endereço http://localhost:8080/api
curl -vX POST -H "Content-type: application/json" -d '{"codigo": "sextou", "desconto": "20"}' http://localhost:8080/api/cupom
curl -vX GET http://localhost:8080/api/cupom
curl -vX DELETE http://localhost:8080/api/cupom/1
curl -vX PUT -H "Content-type: application/json" -d '{"desconto": "30"}' http://localhost:8080/api/cupom/1
curl -vX POST -H "Content-type: application/json" -d '{"nome": "Detergente Ypê", "preco": "1.49"}' http://localhost:8080/api/produto
curl -vX GET http://localhost:8080/api/produto
curl -vX DELETE http://localhost:8080/api/produto/1
curl -vX PUT -H "Content-type: application/json" -d '{"preco": "2.49"}' http://localhost:8080/api/produto/1
curl -vX POST -H "Content-type: application/json" -d '{}' http://localhost:8080/api/carrinho
curl -vX GET http://localhost:8080/api/carrinho
curl -vX GET http://localhost:8080/api/carrinho/1/produtos
- Algumas funcionalidades sugeridas não foram implementadas.
- Desenvolver testes unitários.
- Autenticação com Spring Security.
- Particionar endpoints de acordo com funcionalidade, com o intuito de torná-los entradas para microsserviços de produtos, cupons etc.
- Utilização de base de dados standalone, sem descartar o Apache Derby.
- Inclusão do serviço Swagger para guiar definição da API e endpoints
- Em breve...
Copyright © 2020 Elmon Noronha
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.