I wouldn't mind making an endpoint like /member/{id}/eligibleForFreeTraining and just return a true or false but that is not CRUD or REST.
C'è un precedente per quello; per esempio:
link
I could possibly add this information onto the Read endpoint but that means that its going to get returned on every read call. This is fine this time, but what happens when there are 100 checks and now we return 100 fields that are only needed at certain times? It just gets bloated.
Una risposta è che puoi avere rappresentazioni multiple, con livelli diversi di dettagli. Il modo RESTful per farlo sarebbe avere diversi tipi di media che descrivono le diverse rappresentazioni.
Ad esempio, Apis per Sun Cloud definisce un numero di diverse rappresentazioni JSON, identificate da distinti < a href="https://en.wikipedia.org/wiki/Media_type#Vendor_tree"> tipi di media del fornitore .
È sempre stato consentito implementare risorse con più di una rappresentazione del tipo di supporto e nulla nelle "regole" ti impedisce di avere più di una rappresentazione con lo stesso suffisso del tipo di supporto.
La richiesta del client per la risorsa specificherà il tipo di supporto appropriato e il server lo offrirebbe, se disponibile.
Il modo RESTful di comunicare sui tipi di media disponibili è di annunciare la loro disponibilità tramite i controlli hypermedia. In altre parole, oltre a fornire al client un collegamento che specifica il tipo di supporto "standard" per la risorsa, fornisci collegamenti alternativi che può utilizzare in altre circostanze.
EDIT consentito, ma non necessariamente incoraggiato.
We encourage resource owners to only use true content negotiation (without redirects) when the only difference between formats is mechanical in nature.
- Fielding, 2006
Ciò favorirebbe, come ha osservato Jack nei commenti, utilizzando una risorsa logica diversa per le diverse rappresentazioni che si desidera supportare.
Detto questo, è probabilmente opportuno sottolineare che in un'applicazione REST (vale a dire, se l'API fornisce un protocollo), non è necessario comunicare al client lo stato del flag, ma utilizzare lo stato del flag per determinare se includere o meno collegamenti ad altre risorse nella rappresentazione della risorsa che si invia al client.
Per il tuo esempio, ciò significherebbe includere un link "Iscriviti a formazione gratuita" ai membri idonei e trattenerlo quando i membri non sono idonei, con la consapevolezza che il cliente agisce solo sui link che sono stati forniti al client come parte dello stato dell'applicazione.