Java >> Programma Java >  >> Java

La chiamata di procedura remota Java è morta nell'era REST?

Quando Se scriviamo servizi web al giorno d'oggi, puoi essere sicuro senza dubbio che REST sarà la tua prima scelta e probabilmente la tua unica scelta. A volte devi solo creare rapidamente qualcosa simile a RPC che può essere invocato con una semplice chiamata HTTP e utilizza JSON come tutti i ragazzi fantastici del blocco. Immettere JSON-RPC.

JSON-RPC

RPC ha avuto davvero una brutta reputazione grazie ad alcuni degli standard che sono stati utilizzati per ottenerlo. La maggior parte degli sviluppatori rabbrividisce quando si confronta con WSDL e buste SOAP. Tuttavia, RPC ha ancora molti casi d'uso, ad esempio per il remoting tra un front-end aziendale e un back-end dedicato. La maggior parte degli utenti di Spring ha familiarità con le funzionalità remote che fornisce, inclusa la chiamata HTTP (usando la serializzazione Java), JMS e il semplice vecchio RMI. JSON-RPC può essere un ottimo sostituto drop-in in queste circostanze e fornire un modo semplice per testare e richiamare le tue API usando solo un browser.

JSON-RPC è uno standard ufficiale, ora nella sua versione 2.0. Utilizza i payload JSON per definire sia la richiesta che la risposta della chiamata RPC. Una chiamata JSON-RPC standard ha il seguente aspetto:

{
 "id":1234,
 "method":"myRpcMethod",
 "params":["test"]
}

Con JSON-RPC puoi scegliere di avere un endpoint dedicato per servizio o un singolo endpoint, differenziando tra i servizi a livello di server anteponendo al nome del metodo un identificatore di servizio.

La risposta sarà il risultato della chiamata o una struttura che restituirà informazioni sull'errore nel caso in cui la chiamata non vada a buon fine.

Utilizzo di JSON-RPC con Java

Ci sono un paio di librerie JSON-RPC là fuori. Tuttavia, come ho scoperto, vale la pena guardarne solo uno, specialmente se stai usando Spring:jsonrpc4j. Utilizza Jackson per fornire la mappatura tra POJO e JSON e può quindi essere facilmente esteso per supportare una pletora di librerie Java come il supporto della serializzazione per Joda Time e la nuova API Money.

Con jsonrpc4j esporre un servizio come servizio JSON è facilissimo. Ti fornirò la configurazione di base per esporre un servizio in Spring Boot, ma puoi trovare maggiori informazioni nella documentazione del progetto.

Ad esempio, supponiamo di avere un servizio che deve essere esposto che assomiglia a questo:

public interface MyService {
 String sayHelloWorld(String name);
}

public class MyServiceImpl implements MyService {
 public String sayHelloWorld(String name) {
 return "Hello world, " + name;
 }
}

Per esporre questo servizio a JSON-RPC con Spring Boot, questa è la configurazione di cui hai bisogno con jsonrpc4j:

@SpringBootApplication
public class RpcApplication {
 public static void main(String[] args) {
 SpringApplication.run(RpcApplication.class);
 }

 @Bean
 public MyService myService() {
 return new MyServiceImpl();
 }

 @Bean(name = "/rpc/myservice")
 public JsonServiceExporter jsonServiceExporter() {
 JsonServiceExporter exporter = new JsonServiceExporter();
 exporter.setService(myService());
 exporter.setServiceInterface(MyService.class);
 return exporter;
 }
}

E questo è tutto. Avvia la tua applicazione Boot ed esegui il seguente curl comando:

curl -v -X POST -d '{"id":0, "method":"sayHelloWorld", "params":["John Doe"]}' http://localhost:8080/rpc/myservice

Dovresti quindi ricevere la seguente risposta:

{"response": "Hello world, John Doe"}

E questo è tutto per esporre i metodi JSON-RPC con Spring Boot. Molto semplice, molto veloce e molto potente. Personalmente mi piacciono molto le API JSON-RPC per uso interno perché ha una curva di apprendimento così piccola. Sebbene non sia sicuramente REST, ti consente di esporre rapidamente un servizio su un'interfaccia HTTP con strutture di dati JSON. Le API JSON-RPC possono essere un'eccellente aggiunta alle tue API REST. Non c'è dubbio che le API REST siano preferite per i servizi Web esterni, ma per la comunicazione interna o le API interne, JSON-RPC può fornire una rapida alternativa per esternalizzare i servizi senza doversi preoccupare di mappare tutto su risorse RESTful.


Etichetta Java