java-restify
2.x
2.x
  • Visão geral
  • Início
    • Instalação
    • Início rápido
  • Anotações
    • Anotações padrão
    • Extensões
      • JAX-RS
      • Spring Framework
  • Tipos de conteúdo
    • Serialização e deserialização
    • Formatos
      • wildcard
      • application/json
        • Jackson
        • Gson
        • JSON-B
        • JSON-P
      • application/xml
        • JAX-B
      • application/x-www-form-urlencoded
        • Map
        • Parameters
        • @Form
      • multipart/form-data
        • MultipartFile
        • Map
        • MultipartParameters
        • @MultipartForm
      • text/plain
      • text/html
      • application/octet-stream
  • Tipos de retorno de método
    • Visão geral
    • Objetos suportados
    • Extensões
      • Guava
      • Jsoup
      • Frameworks reativos
      • Vavr
      • Spring Framework
  • Requisições assíncronas
    • Visão geral
    • Extensões
      • Apache Async HTTP Client
      • OkHtp
      • Netty
  • Programação reativa
    • Frameworks suportados
      • RxJava (1.x)
      • RxJava (2.x)
      • Project Reactor
  • Manipulação de erros
    • Manipulação de erros
  • Retry
    • Retry
  • Clientes HTTP
    • Visão geral
      • Requisições assíncronas
    • Extensões
      • Jersey HTTP Client
      • Apache HTTP Client
      • Apache Async HTTP Client
      • OkHtp
      • Netty
  • Netflix OSS
    • Hystrix
    • Ribbon
  • Spring Framework
    • Anotações
    • Retornos de método
    • RestTemplate
    • Spring Boot
  • Autenticação
    • Basic
    • OAuth 2
  • Lista de artefatos
    • Artefatos
Powered by GitBook
On this page
  • Instalação
  • Maven
  • Gradle
  • Utilização
  • Tipos suportados
  • Configuração

Was this helpful?

  1. Programação reativa
  2. Frameworks suportados

RxJava (2.x)

PreviousRxJava (1.x)NextProject Reactor

Last updated 6 years ago

Was this helpful?

é a implementação Java do , uma poderosa API para programação reativa.

O java-restify fornece suporte para as versões e 2.x do RxJava, e os principais objetos podem ser utilizados como retorno de método.

Instalação

O suporte para o RxJava 2.x está na dependência java-restify-rxjava-2. Uma vez presente no classpath, os handlers serão automaticamente registrados.

Maven

<dependency>
  <groupId>com.github.ljtfreitas</groupId>
  <artifactId>java-restify-rxjava-2</artifactId>
  <version>{version}</version>
</dependency>

Gradle

dependencies {
  compile("com.github.ljtfreitas:java-restify-rxjava-2:{version}")
}

Utilização

Tipos suportados

  • Observable

Ao utilizar o Observable como retorno de método, o java-restify irá assumir que a resposta da requisição representa uma coleção.

Por exemplo, digamos que o endpoint a ser consumido retorne um JSON; se a resposta for um array (uma coleção), você pode utilizar o Observable; se a resposta for um único objeto, utilize um Single ou um Maybe (ver abaixo).

import io.reactivex;

public interface MyApi {

    @Path("/customers") @Get
    Observable<Customer> getAllCustomers();
}
  • Flowable

Ao utilizar o Flowable como retorno de método, o java-restify irá assumir que a resposta da requisição representa uma coleção.

import io.reactivex.Flowable;

public interface MyApi {

    @Path("/customers") @Get
    Flowable<Customer> getAllCustomers();
}
  • Single

O Single é um tipo de retorno adequado caso a resposta da requisição represente um único objeto (assim como o Observable ou Flowable são mais adequados para uma sequência/coleção de objetos); outra possibilidade para esse cenário é o Maybe (detalhado mais abaixo).

import io.reactivex.Single;

public interface MyApi {

    @Path("/customers/{id}") @Get
    Single<Customer> getCustomerById(@PathParameter String id);
}
  • Maybe

O Maybe é um tipo de retorno adequado caso a resposta da requisição represente um único objeto; uma diferença em relação ao Single é o fato do Maybe permitir valores nulos (por exemplo, uma resposta vazia).

import io.reactivex.Maybe;

public interface MyApi {

    @Path("/customers/{id}") @Get
    Maybe<Customer> getCustomerById(@PathParameter String id);
}
  • Completable

O uso desse objeto como retorno de método é adequado quando não é necessário obter o corpo da resposta, mas o seu código deve reagir quando a requisição for concluída sem erros ou em caso de problemas.

import rx.Completable;

public interface MyApi {

    @Path("/customers") @Post
    Completable createCustomer(@BodyParameter Customer customer);
}

Configuração

Caso essa configuração não atenda às necessidades da sua aplicação, desligue a descoberta automática de handlers e registre-os manualmente:

import io.reactivex.Scheduler;
import io.reactivex.schedulers.Schedulers;
import com.github.ljtfreitas.restify.http.client.call.handler.rxjava2.RxJava2CompletableEndpointCallHandlerFactory;
import com.github.ljtfreitas.restify.http.client.call.handler.rxjava2.RxJava2FlowableEndpointCallHandlerAdapter;
import com.github.ljtfreitas.restify.http.client.call.handler.rxjava2.RxJava2MaybeEndpointCallHandlerAdapter;
import com.github.ljtfreitas.restify.http.client.call.handler.rxjava2.RxJava2ObservableEndpointCallHandlerAdapter;
import com.github.ljtfreitas.restify.http.client.call.handler.rxjava2.RxJava2SingleEndpointCallHandlerAdapter;

Scheduler myScheduler = Schedulers.from(Executors.newFixedThreadPool(10));

MyApi myApi = new RestifyProxyBuilder()
  .handlers()
    .discovery()
        .disabled()
    .add(new RxJava2CompletableEndpointCallHandlerFactory(myScheduler))
    .add(new RxJava2FlowableEndpointCallHandlerAdapter<>(myScheduler))
    .add(new RxJava2MaybeEndpointCallHandlerAdapter<>(myScheduler))
    .add(new RxJava2ObservableEndpointCallHandlerAdapter<>(myScheduler))
    .add(new RxJava2SingleEndpointCallHandlerAdapter<>(myScheduler))
    .and()
  .target(MyApi.class)
    .build();

é um objeto reativo que representa a emissão de uma sequência de valores.

é um novo objeto reativo introduzido na versão 2.x do RxJava, que implementa a interface , da especificação . Assim como o Observable, o Flowable representa a emissão de uma sequência de valores com suporte a back-pressure.

é um objeto reativo que representa a emissão de um único valor.

é um objeto reativo que representa a emissão de um único valor ou nenhum valor.

é um objeto reativo que não emite valores, podendo apenas ser completado sem erros ou emitir um erro.

Em todos os casos acima, o java-restify irá executar a requisição em uma thread separada usando o , através do objeto .

Por padrão, o Scheduler será criado a partir do método , que é o mais adequado para requisições HTTP.

RxJava
Reactive Extensions
1.x
Observable
Flowable
Publisher
Reactive Streams
Single
Maybe
Completable
suporte do RxJava para processamento assíncrono
Scheduler
Schedulers.io