Domanda

Con i servizi Web, è consigliabile raggruppare più chiamate di servizio in un unico messaggio per ridurre un numero di chiamate remote. C'è un modo per farlo con i servizi RESTful?

È stato utile?

Soluzione

Non vedo come le richieste di batch abbiano senso in REST. Poiché l'URL in un servizio basato su REST rappresenta l'operazione da eseguire e i dati su cui eseguirla, effettuare richieste batch romperebbe seriamente il modello concettuale.

Un'eccezione sarebbe se stavi eseguendo la stessa operazione sugli stessi dati più volte. In questo caso puoi passare più valori per un parametro di richiesta o codificare questa ripetizione nel corpo (tuttavia questo funzionerebbe davvero solo per PUT o POST). L'API REST Gliffy supporta l'aggiunta di più utenti nella stessa cartella tramite

POST /folders/ROOT/the/folder/name/users?userId=56&userId=87&userId=45

che è essenzialmente:

PUT /folders/ROOT/the/folder/name/users/56
PUT /folders/ROOT/the/folder/name/users/87
PUT /folders/ROOT/the/folder/name/users/45

Come ha sottolineato l'altro commentatore, i risultati di paginazione da un GET possono essere eseguiti tramite i parametri di richiesta:

GET /some/list/of/resources?startIndex=10&pageSize=50

se il servizio REST lo supporta.

Altri suggerimenti

Se hai davvero bisogno di eseguire il batch, Http 1.1 supporta un concetto chiamato HTTP Pipelining che ti consente di inviare più richieste prima di ricevere una risposta. Dai un'occhiata qui

Sono d'accordo con Darrel Miller. HTTP supporta già HTTP Pipelining, inoltre i supporti HTTP mantengono in vita consentendoti di eseguire lo streaming di più operazioni HTTP contemporaneamente nello stesso socket per evitare di dover attendere le risposte prima di inviare in streaming nuove richieste al server ecc.

Quindi, con il pipelining HTTP e mantenendoti in vita, ottieni l'effetto del batch utilizzando la stessa API REST sottostante, quindi di solito non è necessaria un'altra API REST per il tuo servizio

Il team di Astoria ha fatto buon uso del mime in più parti per inviare un batch di chiamate. Diverso dal pipelining in quanto il messaggio in più parti può dedurre l'intento di un'operazione atomica. Sembra piuttosto elegante.

Naturalmente c'è un modo, ma richiederebbe il supporto lato server. Non esiste una taglia magica adatta a tutta la metodologia che conosco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top