2008-11-10 10 views
9

Mam usługę WWW RESTful wdrożoną pod adresem http://example.com/v1/SomeResource. Pewnego dnia nowa wersja protokołu (, która nie jest kompatybilna wstecznie) jest wdrażana pod numerem http://example.com/v2/SomeResource. Z perspektywy klienta to uaktualnienie może nastąpić w dowolnym momencie między dwoma żądaniami HTTP.Wersja RESTful usługi?

W jaki sposób serwer wskazuje klientowi, że nie obsługuje już wywołań v1, a klient powinien przejść na wersję 2? Czy istnieje odpowiedni kod odpowiedzi, którego mogę użyć?

chciałbym dostarczyć klientowi z następującymi informacjami:

  1. niezgodna uaktualnienie miało miejsce. Klient nie może korzystać z nowej usługi, ponieważ protokół może być zupełnie inny.
  2. Adres URL nowego oprogramowania klienckiego.
  3. Wiadomość wyjaśniająca użytkownikom konieczność aktualizacji.
+2

Na co warto, uważam stanowisko Darrel (w osobnym pytaniu) być pouczające: http://stackoverflow.com/pytania/972226/how-to-wersji-rest-URI/975394 # 975394 – Gili

+0

Możliwy duplikat [najlepszych praktyk dla API wersjonowanie?] (https://stackoverflow.com/questions/389169/best-practices-for-api -wersing) – Helen

Odpowiedz

8

Najlepsza praktyka:

To chyba lepiej, aby utrzymać wersjonowanie z URL-i, aby nowe zasoby wstecznie kompatybilny ze starym.

Wsteczna kompatybilność:

Jeśli trzeba zachować v1 w adresie URL, adresów URL i robią V2, to musisz zdecydować, czy chcesz obsługiwać oba formaty, lub sprawić, że stary v1 nieaktualne. Jeśli zdecydujesz się na przestarzałe stare wydanie v1, polecam zwrócić 303 lub 401 dla każdego, kto zażąda adresu URL w wersji 1.

Making stare adresy nieaktualne:

Polecam przy użyciu 303 Zobacz inne. Lub jeśli nie ma powiązanego przekierowania, użyj 410 Gone.

Source

303 Zobacz inne

Odpowiedź na żądanie można znaleźć pod innym URI i POWINNA być pobierane za pomocą metody GET na tego zasobu. Ta metoda istnieje głównie w celu umożliwienia wyjścia skryptu aktywowanego POST z do przekierowania klienta użytkownika do wybranego zasobu. Nowy URI o numerze nie jest referencją zastępczą dla pierwotnie żądanego zasobu. Odpowiedź 303 NIE MOŻE być buforowana, , ale odpowiedź na drugie żądanie (przekierowane) może być buforowana .

Różne URI POWINIEN być podane przez w polu Lokalizacja w odpowiedzi. O ile metoda żądania nie była HEAD, , jednostka odpowiedzi POWINIUSZ zawierać krótki hipertekstowy tekst z hiperłączem do nowego identyfikatora URI.

Uwaga: Wiele pre-HTTP/1.1 agent użytkownika nie rozumie statusu 303 . Kiedy interoperacyjność z takich klientów jest problemem, kod 302 status może być stosowany zamiast, ponieważ większość agentów użytkowników reagować do odpowiedzi 302 jak opisano tutaj 303.

Dokument wszystko:

Najważniejszą rzeczą, którą należy się martwić, jest to, co wybrałeś do zwrotu, po prostu udokumentuj to w swojej dokumentacji. Możesz zdecydować, w jaki sposób chcesz, aby Twoja usługa działała, a inne, które chcą ją wykorzystać, będą postępować zgodnie z dokumentacją.

0

Polecam zamiast korzystania z 301 (301 Przeniesiono stałe). Przeczytaj why.

nadzieję, że to pomaga, Bruno Figueiredo

+1

Nie jestem pewien, czy SEO jest istotne dla usług RESTful (konsumowanych przez maszyny, a nie przez ludzi). – Gili

4

myślę, że nie powinno to zrobić w pierwszej kolejności, ale prawdopodobnie jest już za późno.

URI powinien być również tak, że statyczny gdy zmienia zasobu lub realizacja zmian serwisowych link pozostaje taka sama. Umożliwia to zakładki . Ważne jest również, aby relacja między zasobami powiązana między zasobami , która jest zakodowana w identyfikatorach URI, pozostaje niezależna od sposobu, w jaki są reprezentowane relacje , gdzie są przechowywane .

Z artykułu RESTful Web services: The basics.

+0

Tak, w idealnym świecie masz rację, ale mówię o tym, co robić, gdy musisz przełamać kompatybilność wsteczną. Jeśli mogę zachować zgodność wsteczną, spróbuję zachować te same identyfikatory URI, co sugerowałeś. – Gili

Powiązane problemy