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?