Zidentyfikuj element za pomocą identyfikatora lub ślimaka w API RESTful

Obecnie projektuję interfejs API i natknąłem się na mały problem:Jak powinien wyglądać adres URL API RESTful, gdy powinieneś być w stanie zidentyfikować przedmiot za pomocą identyfikatora lub ślimaka?

Mógłbym wymyślić trzy opcje:

<code>GET /items/<id>
GET /items/<slug>
</code>

Wymaga to, aby ślimak i identyfikator były rozróżnialne, co niekoniecznie jest podane w tym przypadku. Nie mogę wymyślić czystego rozwiązania tego problemu, z wyjątkiem tego, że robisz coś takiego:

<code>GET /items/id/<id>
GET /items/slug/<slug>
</code>

Mogłoby to działać dobrze, jednak nie jest to jedyne miejsce, które chcę zidentyfikować za pomocą ślimaka lub identyfikatora i wkrótce stanie się bardzo brzydkie, gdy chce się zastosować to samo podejście do innych działań. Po prostu nie można go rozszerzyć, co prowadzi nas do tego podejścia:

<code>GET /items?id=<id>
GET /items?slug=<slug>
</code>

Wydaje się, że to dobre rozwiązanie, ale nie wiem, czy tego można się spodziewać, co może prowadzić do frustrujących błędów z powodu nieprawidłowego użycia. Ponadto nie jest to łatwe - lub powiedzmy czyste - wdrożenie routingu dla tego. Byłoby to jednak łatwe do rozszerzenia i wyglądałoby bardzo podobnie dometoda uzyskiwania wielu przedmiotów:

<code>GET /items?ids=<id:1>,<id:2>,<id:3>
GET /items?slugs=<slug:1>,<slug:2>,<slug:3>
</code>

Ale ma to również minus: co, jeśli ktoś chce zidentyfikować niektóre przedmioty, które chce pobrać za pomocą identyfikatorów, ale inne z ślimakiem? Połączenie tych identyfikatorów nie byłoby łatwe.

Jakie jest najlepsze i najszerzej akceptowane rozwiązanie tych problemówproblemy? Ogólnie rzecz biorąc, co jest ważne przy projektowaniu takiego API?

questionAnswers(1)

yourAnswerToTheQuestion