La migliore convenzione di denominazione delle rotte quando un GET RESTful deve essere un POST

0

Ho un'API REST che è stata costruita sopra (di fronte a) un sistema legacy, per consentire a terze parti di varie piattaforme di interagire con il sistema.

La maggior parte delle volte, posso definire una risorsa e creare un GET e POST / PATCH, ecc. Tuttavia, ho un paio di casi in cui il GET deve essere in grado di gestire potenzialmente un gran numero di dati di richiesta, ad es. ID risorsa, troppi per un parametro di query.

Esempio di API / libri.

Devo essere in grado sia di richiedere dati sui libri esistenti, sia di aggiungere nuovi libri nel sistema.

Quindi, avrei normalmente

GET api/books
POST api/books

I problemi sono che ho bisogno di essere in grado di supportare un numero (potenzialmente) grande se id per richiedere oggetti con informazioni su un sottoinsieme dei libri, più di quanto possa essere incluso in un url come parametri di query. In precedenza, in un caso come questo, ho usato (a malincuore) un POST per inviare i parametri della richiesta nel corpo.

Il problema qui è che volevo usare il POST per aggiungere un nuovo libro.

Un dibattito su come gestirlo è avvenuto oggi e, sebbene possiamo usare

POST api/books (come GET) PATCH api/books come add

Pensato anche a POST api/books/get , ma questo sembra solo sbagliato (con un verbo nell'URL).

Qualcun altro ha dovuto affrontare una situazione simile, in cui è necessario utilizzare il POST per GET, ma è comunque necessario "POST" per la risorsa, o forse avere qualche suggerimento su un modo migliore per farlo rispetto a quello è suggerito sopra?

Grazie in anticipo per qualsiasi aiuto!

    
posta peterc 20.11.2018 - 14:22
fonte

1 risposta

5

Personalmente utilizzerei un endpoint diverso se veramente non credi di poter utilizzare una richiesta GET. Stai colpendo un limite tecnico o è solo brutto per te?

In ogni caso, supponendo che non si possa usare una richiesta GET, farei un endpoint separato. like / api / search / book o simili. In questo modo il punto dell'endpoint è estremamente ovvio. Potresti anche utilizzare un UPDATE anziché il POST, ma vorrei creare un endpoint completamente separato se usi tipi di richieste per cose per cui non sono progettati. In questo modo non confonderai la logica.

    
risposta data 20.11.2018 - 17:09
fonte

Leggi altre domande sui tag