Home WebServices REST em Jakarta EE usando JAX-RS
Post
Cancelar

WebServices REST em Jakarta EE usando JAX-RS

Baseado nos cursos da Softblue

RESTful WebServices

• REST é um estilo arquitetural

– Representational State Transfer

• Um WebService é visto como um recurso (resource)

• É identificado através de uma URI

– Uniform Resource Identifier

• WebServices que usam o estilo REST são conhecidos como RESTFul WebServices

URI: http://joaonogueira.dev/services/users

JSON:

1
2
3
4
5
6
7
8
9
10
[{
  id: 1,
  name: "João",
  email: "[email protected]"
},
[{
  id: 2,
  name: "Paulo",
  email: "[email protected]"
}]

JSON e XML são muito usados

Operações

• O protocolo HTTP suporta várias operações

– GET, POST, PUT, DELETE, etc.

• RESTFul WebServices tiram vantagens dessas operações

OperaçãoSignificado
GETLer um resource
POSTCriar um resource
PUTAtualizar um resource
DELETEExcluir um resource
   
/services/user/17GETRetorna os dados do usuário com ID 17
/services/usersPOSTCadastra um novo usuário (os dados são enviados no corpo do HTTP)
/services/user/17PUTAtualiza os dados do usuário com ID 17 (os dados são enviados no corpo do HTTP)
/services/user/17DELETEExclui o usuário com ID 17
/services/usersGETRetorna os dados de todos os usuários

Status do HTTP

• Toda requisição HTTP a um servidor resulta em uma resposta (status)

StatusDescrição
200OK
201Created
400Bad Request
403Forbidden
404Not Found
500Internal Server Error

MIME Types

• O MIME Type é o tipo de dado que está sendo transportado pelo protocolo HTTP

• É a forma do cliente e do servidor se “entenderem”

– O cliente envia no header da requisição HTTP qual o MIME Type dos dados que ele está enviando ao servidor

– O servidor envia no header da resposta do HTTP o MIME Type referente aos dados que ele está enviando ao cliente

• Os MIME Types são padronizados

• Alguns dos MIME Types mais comuns usados na troca de dados em WebServices:

MIME TYPEDescrição
application/jsonJSON
application/xmlXML
text/plainTexto puro
text/htmlHTML

A API JAX-RS

• O JAX-RS é uma API que pertence ao Java EE

• Permite criar RESTful WebServices de forma fácil, rápida e intuitiva

Criando Web Services com JAX-RS

• É preciso definir o caminho raiz onde os WebServices da aplicação vão responder

1
2
3
@ApplicationPath("/services")//Define a URI base /services/*
public class JAXRSConfig extends Application {
}

• Uma classe Java é usada para definir o WebService

1
2
3
4
5
6
7
8
@Path("/users")//Define a URI do serviço como /users
public class UserService {

@GET//Método chamado na operação GET
@Produces(MediaType.APPLICATION_JSON)//Retorna os dados no formato JSON
public List<User> list() {
  //...
}

A URI é: /services/users

@Produces & @Consumes

• Ao criar um WebService, é preciso informar que tipo de informação ele consome e que tipo de informação ele produz

1
2
3
4
5
6
7
8
9
10
11
@GET
@Produces(MediaType.APPLICATION_JSON)//Envia JSON para o cliente
public List<User> list() {
  //...
}

@POST
@Consumes(MediaType.TEXT_PLAIN)//Recebe TEXTO do cliente
public void create(String txt) {
  //...
}

Path Parameters

• É possível fornecer parâmetros para o WebService diretamente na URI

1
2
3
4
5
6
7
8
9
@Path("/users")
public class UserService {

@GET
@Path("/{userId}")
@Produces(MediaType.APPLICATION_JSON)
public User find(@PathParam("userId") int id) {
  //...
}

A URI é: /services/users/20 (o 20 é passado como parâmetro para o método find())

Query Parameters

• É possível fornecer parâmetros para o WebService via query string

1
2
3
4
5
6
7
8
@Path("/users")
public class UserService {

@GET
@Produces(MediaType.APPLICATION_JSON)
public User find(@QueryParam("userId") int id) {
  //...
}

A URI é: /services/users?userId=20 (o 20 é passado como parâmetro para o método find())

Cliente para RESTFul Web Services

• O JAX-RS permite fazer requisições a WebServices existentes a partir da interface Client

1
2
3
4
5
User user = ClientBuilder.newClient()
  .target(URI)
  .path("15")
  .request(MediaType.APPLICATION_JSON)
  .get(User.class);

• Para as operações de POST, PUT e DELETE é comum o retorno do tipo Response

1
2
3
4
5
Reponse response = ClientBuilder.newClient()
  .target(URI)
  .path("15")
  .request()
  .delete();

O objeto Response permite recuperar o status HTTP da resposta e outras informações relevantes

Esta postagem está licenciada sob CC BY 4.0 pelo autor.