Webservices RESTful no PlayFramework
O PlayFramework é um framework MVC e para construir webservices nele, primeiro devemos configurar as rotas. As rotas do play são definidas em um arquivo chamado routes, que fica armazenado em um diretório chamado resources. Neste arquivo são definidos os métodos HTTP, o caminho do método chamado e para quais métodos dos controllers serão direcionados estas chamadas. Abaixo é mostrado um exemplo de métodos REST de chamadas a entidade usuário:GET /usuario controllers.UsuarioController.list()A definição deste arquivo é bem fácil de ser compreendida. Primeiro definimos os métodos HTTP:
POST /usuario controllers.UsuarioController.create()
GET /usuario/:id controllers.UsuarioController.get(id:Long)
PUT /usuario/:id controllers.UsuarioController.update(id:Long)
DELETE /usuario/:id controllers.UsuarioController.delete(id:Long)
- GET
- POST
- PUT
- DELETE
- /usuario
http://localhost:9000/usuario
A terceira parte do arquivo routes, define qual mécontrollers.UsuarioController.list() todo do controller será chamado por aquele caminho http. Nesta definição deve-se utilizar o caminho completo da classe, incluindo o pacote e o nome da classe.
- controllers.UsuarioController.get()
Quando o caminho do método contiver algum parâmetro, basta nomear o parâmetro usando o :, que no exemplo acima é o id do usuário. Uma chamada
http://localhost:9000/usuario/123
Irá realizar uma chamada ao método get, convertendo 123 em Long e 123 será usado como argumento do método get.
Definição do controller
A definição do controller é bem simples, só existem duas regras básicas. Primeiro a classe deverá extender a classe abstrata play.mvc.Controller, e todos os seus métodos expostos a chamadas HTTP, deverão retornar um resultado play.mvc.Result. Que nada mais é, que um mapeamento aos status http, por exemplo o ok é um mapeamento ao status HTTP 200 OK.Abaixo segue um exemplo:
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
public class UsuarioController extends Controller {
public static Result list()
{
return ok(Json.toJson(new java.util.ArrayList<Usuario>()));
}
No exemplo, tem-se a implementação do método list. Repare que no retorno dele, usa-se o método ok, que mapeia o status HTTP 200 para a resposta. E este método irá receber o conteúdo do retorno do método, que neste caso é uma lista de Usuario.
Aqui também é utilizado o objeto Json para converter a lista de usuários em uma string Json.
Definição de métodos com objetos no body
Qualquer método definido no controller pode conter objetos no body, abaixo segue o exemplo do método save, que é um post com um usuário em Json no body:public static Result create()request().body() retorna o conteúdo do body da chamada, asJson() converte este resultado em json. O método fromJson converte o json no objeto usuário.
{
Usuario newUsuario = Json.fromJson(request().body().asJson(), Usuario.class);
Usuario inserted = save(newUsuario);
return created(Json.toJson(inserted));
}
Com isso pega-se o resultado json do body da chamada, transforma-o em um objeto json, e converte este json em uma instância do objeto usuário.
Testando:
Os testes do método GET podem ser executados direto no navegador, para isto basta digitar o entereço de execução da sua instância e pronto, por exemplo:
localhost:9000/usuarioIrá executar o método GET do usuário e retornar uma lista de todos os usuários inseridos na sua instância.
Já para testar os outros métodos, devermos ou instalar uma ferramenta de teste de REST, como o SOAPUI ou mesmo instalar uma extensão de REST ao seu navegador, como a RestLet Client.
Para executarmos uma chamada com POST devemos utilizar um json, como o mostrado abaixo:
{ "id": 4, "nome": "DirceuProf", "endereco":{"id": 1, "rua": "Marques de São Vicente", "numero": "3001", "cidade": "Sao Paulo", "estado": "Sao Paulo","cep":"05003000"} }Lembrando que nos testes você pode, e deve, alterar os dados que serão inseridos.
Todo o conteúdo de classes deste post está localizado neste repositorio, e apresentação
Nenhum comentário:
Postar um comentário