Sto scrivendo un documento YAML usando swagger per progettare un metodo API RESTful per la clonazione di una risorsa. Ho alcune opzioni e non so quale sarebbe il migliore. Per favore qualcuno può avvisare?Progettazione API REST per la clonazione di una risorsa
Opzioni:
- Abbandonare la responsabilità di clonare l'oggetto risorsa per il consumatore (dove il consumatore assegna valori alle proprietà in un nuovo oggetto e quindi crea un nuovo oggetto), il processo avrebbe bisogno di consistono in due richieste all'API: un GET contro una risorsa per l'oggetto di origine e quindi un POST a quella risorsa per crearne uno nuovo. Sembra che il consumatore abbia troppe responsabilità.
- Utilizzo delle estensioni HTTP WebDAV che fornisce un metodo COPIA (see here). Sembrerebbe che questo è esattamente quello che vorrei per la clonazione. Tuttavia, vorrei attenersi ai metodi standard, per quanto possibile
- postando/{} risorsa? ResourceIdToClone = {id} dove resourceIdToClone è un parametro opzionale. Ciò sarebbe in conflitto con un percorso API che ho già per la creazione della risorsa, in cui aggiungo uno schema al corpo POST. Significa usare un POST a/{resource}/per creare e clonare, e questo violerebbe SRP.
- Aggiunta di una nuova risorsa denominata "CloneableResource" ed esecuzione di un POST a/CloneableResource/{resource_type}/{resource_source_id}. Per l'esempio della clonazione di una pecora, devi eseguire un POST a/CloneableResource/Sheep/10. In questo modo, sarebbe possibile attenersi all'utilizzo dei metodi HTTP standard, non ci sarebbero conflitti con altri percorsi di risorse (o violazione SRP). Tuttavia, aggiungerei un nuovo tipo potenzialmente superfluo al dominio. Non riesco nemmeno a pensare a uno scenario in cui un consumatore vorrebbe eseguire qualcosa di diverso da un POST a questa risorsa, quindi lo mi sembra un odore di codice.
- GET contro/resource/{id}? Method = clone. Uno dei vantaggi qui è che non è richiesta alcuna risorsa aggiuntiva e può essere determinata da un semplice parametro querystring opzionale. Sono consapevole che uno dei rischi qui è che può essere pericoloso fornire funzionalità di post o eliminazione utilizzando un metodo GET se l'URL si trova in una pagina Web in quanto potrebbe essere sottoposto a scansione da un motore di ricerca.
Grazie per qualsiasi aiuto!
Grazie per la vostra risposta Julian. Questa è un'opzione conveniente e non vi è alcun dubbio su ciò che il metodo consente al consumatore di fare. Tuttavia, ritengo che attenersi ai metodi HTTP standard sia il modo migliore per ora perché semplificherebbe la mia API ed eviterebbe uno scenario in cui è possibile ottenere lo stesso risultato in due modi diversi (clonazione di una risorsa usando COPY o fare un GET contro una risorsa e poi un POST). Preferirei limitare il consumatore a un solo metodo coerente per ottenere un clone di risorse tramite la mia API –