la sostituzione multipla entità in un'interfaccia RESTful
-
27-09-2019 - |
Domanda
Ho un servizio con alcune entità che vorrei esporre in modo RESTful. A causa di alcuni dei requisiti che ho qualche difficoltà a trovare un modo che trovo bene.
Queste sono le operazioni 'normali' ho intenzione di supporto:
GET /rest/entity[?filter=<query>] # Return (matching) entities. The filter is optional and just a convenience for us CLI curl-users :)
GET /rest/entity/<id> # Return specific entity
POST /rest/entity # Creates one or more new entities
PUT /rest/entity/<id> # Updates specific entity
PUT /rest/entity # Updates many entities (json-dict or multipart. Haven't decided yet)
DELETE /rest/entity/<id> # Deletes specific entity
DELETE /rest/entity # Deletes all entities (dangerous but very useful to us :)
Ora, gli ulteriori requisiti:
-
Abbiamo bisogno di essere in grado di sostituire l'intero set di entità con un nuovo insieme di entità (la fusione può avvenire internamente come un'ottimizzazione).
Ho pensato di utilizzare
POST /rest/entity
per questo, ma che eliminerebbe la possibilità di creare singole entità a meno che non mi muovo tale funzionalità. Ho visto percorsi / resto / ente / new-style in altri luoghi, ma è sempre sembrato un po 'strano per riutilizzare il segmento del tracciato ID per che, poiché non potrebbe o non potrebbe essere una collisione in ID (non nel mio caso, ma miscelazione spazi dei nomi del genere mi dà un prurito:)Ci sono pratiche comuni per questo tipo di operazione? Ho anche considerato
/rest/import/entity
come un percorso separato per le operazioni non riposanti simili per altri tipi di entità che potremmo avere, ma non mi piace muoversi al di fuori del percorso di entità casa. -
Abbiamo bisogno di essere in grado di eseguire la maggior parte delle operazioni in un -mode "dry-run" per la convalida.
Le stringhe di query sono di solito considerati un anatema, ma io sono già un peccatore per un filtro. Per la modalità di convalida, sarebbe l'aggiunta di un flag
?validate
o?dryrun
essere ok? Hanno tutti fatto qualcosa di simile? Quali sono gli svantaggi? Questo è inteso come un aiuto per interfacce utente rivolto per implementare la convalida facilmente.
Non aspettatevi di dover utilizzare alcun meccanismo di caching come questo è un servizio di configurazione piccola raramente toccato, quindi l'ottimizzazione per il caching non è strettamente necessario
Soluzione
Abbiamo bisogno di essere in grado di sostituire l'intero set di entità con un completamente nuova di entitiescompletely nuova serie di entità
Questo è ciò che fa, no?
PUT /rest/entity
PUT ha sostituzione semantica. Forse si potrebbe utilizzare il PATCH verbo supporto fare gli aggiornamenti parziali.
Personalmente, vorrei cambiare il nome della risorsa di "EntityList" o "EntityCollection", ma questo è solo perché è più chiaro per me.