Projeto para criação de app REST API (clone do Twitter) na plataforma Clojure
Conforme solicitado, o desafio deste projeto consistia em desenvolver, a partir de linguagem de programação --- neste caso, Clojure --- uma REST API estilo Twitter que permitisse as seguintes operações:
- Criar um novo tweet
- Listar seus próprios tweets
- Visualizar seu próprio tweet
Além das acima, um rol de outras funcionalidades (bônus) foram sugeridas. Neste projeto, as seguintes foram implementadas:
- Autenticação (simples, com usuário e senha (aberta) em banco de dados)
- Curtir (e contar curtidas)
- Seguir (e contar seguidores e seguindo)
Foi preferido pela equipe a linguagem de programação Clojure dentre a lista sugerida, devido à possibilidade de se transferir experiência em contato anterior com a linguagem Common Lisp, da mesma família. A ligação de Clojure com a API Java e sua associação ao JVM também se destacaram.
O sistema operacional selecionado foi a distribuição Linux openSuse Tumbleweed. Também foram selecionadas as seguintes ferramentas de dsenvolvimento:
Para facilitar o desenvolvimento deste projeto, recorreu-se a frameworks da comunidade Clojure específicos para as funcionalidades a serem implementadas, a saber:
- Ring: framework para tratamento de chamadas HTTP de baixo nível e servidor web (Eclipse Jetty)
- Compojure: ferramenta para manipulação de rotas, trabalhando integrada ao Ring
- Clojure JDBC: pacote para utilização de camada JDBC de acesso a banco de dados
- SQlite: banco de dados embutido para utilização em fase de desenvolvimento, no caso deste projeto
Mais detalhes em project.clj.
Os arquivos referentes ao banco de dados e seu arquivo DDL estão em resources.
Fazer download de desafiocljapi-0.1.0-SNAPSHOT-standalone.jar e executá-lo como segue abaixo:
$ java -jar desafiocljapi-0.1.0-SNAPSHOT-standalone.jar
A porta disponível será 3000 ou incrementos disto
É possível fazer testes com as seguintes chamadas da API, além da autenticação:
- POST /statuses/update (parâmetro "text")
- GET /statuses/lookup (sem parâmetros)
- GET /statuses/show/:id (parâmetro id, o id do tweet)
Sugerimos a utilização do utilitário curl e do usuário:senha admin:admin, único disponível atualmente na base de dados.
Exemplo (autenticação):
-
Chamada bem-sucedida:
$ curl -u 'admin:admin' -v http://localhost:3001/
-
Chamada malsucedida:
$ curl -u 'foo:bar' -v http://localhost:3001/
Exemplo (tweets):
-
Criar tweet:
$ curl -u 'admin:admin' -d 'text="Quarto teste"' http://localhost:3001/statuses/update
-
Ver tweets do usuário logado:
$ curl -u 'admin:admin' -v http://localhost:3001/statuses/lookup
- Documentação completa
- Concorrência e multithreading
- Banco de dados escalável (possivelmente PostgreSQL)
- Execução em contêineres (possivelmente em nuvem)
- Retorno em JSON não funciona
Copyright © 2019 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.