I messaggi del servizio Web devono essere pesanti, non chiacchieroni . Orientato ai messaggi, non orientato alle chiamate.
Una richiesta o un messaggio di comando dovrebbe contenere, come minimo, informazioni sufficienti per:
- Convalidare il chiamante (autenticazione / autorizzazione).
- Convalidare la transazione (ad esempio, una richiesta di aggiornamento in un ambiente di concorrenza ottimistico potrebbe richiedere il numero di versione originale)
- Esegui la transazione (identificatori, parametri di ricerca, ecc.)
Inoltre, di solito ci sono molti parametri / elementi che vorrete avere come facoltativo ma non richiesto :
-
Elenchi di richieste secondarie, con un ID di correlazione fornito dal cliente. Per qualsiasi operazione, non richiedere al cliente di effettuare richieste una per una; invece, consenti loro di stipare tutto in un unico messaggio e assicurati di ripetere i loro ID di correlazione nella risposta. Questo è di fondamentale importanza negli ambienti ad alta latenza. (Gli ID di correlazione dovrebbero ovviamente essere facoltativi, come la lista stessa).
-
Il tipo di dati (specialmente per REST) - consente ai client di specificare XML, JSON, ecc.
-
Controlla la dimensione e la forma del messaggio di risposta, specialmente se la risposta sarà molto grande e / o contiene molti elementi. Come minimo, fornire un modo per limitare il numero massimo di risultati. Le opzioni di ordinamento e paging sono migliori. Alcuni servizi, ad esempio Salesforce, forniscono anche un "ID query" che può essere utilizzato per recuperare rapidamente le pagine di un risultato.
Se è probabile che faccia una differenza nelle prestazioni, potresti anche considerare di consentire ai client di indicare il livello di nidificazione e / o quali relazioni caricare, utilizzando un valore predefinito sensato (generalmente tutto o nessuno).
-
Un indirizzo di ritorno (per i messaggi a senso unico).
-
Timeout, strategie di gestione degli errori, impostazioni dei registri o qualsiasi altra cosa che potrebbe essere di particolare importanza per una transazione di lunga durata. (Ancora, usa le impostazioni predefinite e convalida gli input!)
-
Alcuni servizi forniranno ai clienti un'area in cui inserire solo i dati utente desiderati, come stringa o come elemento XML. Pensa a questa come alla linea "memo" su un assegno. È particolarmente utile negli scenari di messaggistica a senso unico.
Non posso sottolineare abbastanza strong che questo secondo elenco di opzioni deve essere facoltativo e utilizzato solo per i messaggi che ne beneficiano effettivamente . Non vuoi confondere i clienti con una serie sconcertante di opzioni apparentemente inutili.
Infine, cerca di mantenere le informazioni che sono comuni a tutti i messaggi (specialmente le credenziali) nelle intestazioni, non nel corpo. Se si hanno informazioni comuni a molti messaggi ma non necessariamente tutti (l'ordinamento / paging è un esempio comune), quindi considerare di astrarlo nel proprio tipo di dati (oggetto parametro) . In questo modo il cliente può riutilizzare le stesse impostazioni più e più volte se lo desidera.
Per favore non richiedere tutti i tipi di controlli e saldi come nomi che devono corrispondere a ID, ID sessione, checksum, totali di controllo o altro. Devi fidarti dei tuoi clienti con i privilegi che hanno ricevuto. Se non ti fidi di loro di inviare dati corretti (in base ai propri requisiti), allora hai un problema commerciale da risolvere, non tecnico.