2013-09-23 9 views
24

Przeczytałem wiele postów związanych z przepełnieniem stosu (i innych) w wersjach usług RESTful. To trochę przytłaczające, szczerze mówiąc.Dostawcy typów MIME (dla wersji API)

Postanowiłem użyć nagłówka Accept: dla naszej (minimalnie) usługi RESTful, aby klienci mogli żądać określonych wersji zasobu. To, co nie jest jasne, to, co określić w nagłówku Accept.

Przykładem często widziałem to:

Accept: application/vnd.mycompany.myapp.customer-v2+json 

moje pytania są następujące:

  1. Czy mam rację, że wszystkie rodzaje VND muszą być zarejestrowane? (http://www.iana.org/cgi-bin/mediatypes.pl)

  2. Czy wersja i typ (tj. -v2 + json) są częścią typu, a więc każda wersja i typ musiałaby zostać zarejestrowana?

  3. Czy istnieje jakiś powód użycia vnd zamiast podtypu "x-", który nie musi być zarejestrowany? Na przykład:

    Accept: application/x-mycompany.myapp-v2+json 
    

    Istniejący interfejs API jest tylko wewnętrzny, ale w przyszłości będzie dostępny dla klientów.

  4. Nie wiesz, czy to ma sens, ale czy można użyć istniejącego typu, ale dodać wersję? (Obecne API zwraca "application/json")

    Accept: application/json-v2 
    
  5. Co dopuszczalne formaty dodanie wersję i typ (np -v2 + json).

  6. Co się stanie, jeśli klient poprosi o wersję nieobsługiwaną? Czy poprawna odpowiedź to 406? Czy klient może zażądać dowolnej wersji? Lub bardziej ogólnie, co jeśli klient nie dostarczy nagłówka Accept lub Accept: */*?

Wszelkie dodatkowe sugestie są mile widziane. Celem jest oczywiście umożliwienie zmiany tego, co usługa zwraca dla danego zasobu, ale nie może złamać istniejących klientów.

Oto krótka lista zasobów Szukałem w ostatnim czasie:

+1

Przedrostek x- został przestarzały. Gdyby był nadal w użyciu, potrzebowałbyś obu. "Vnd." to prefiks dostawcy. Jest nadal poprawny i powinien być zawsze używany podczas używania mime typu dostawcy. – yam655

Odpowiedz

3

Jak już postanowił pójść ze standardu jsonapi.org, postanowiłem zrobić to, czego Twój przykład pokazuje.

Odnośnie pytania:

  1. Twój typ MIME powinien zostać zarejestrowany
  2. Wierzę, że każda wersja i typ powinien być zarejestrowany, ponieważ są one unikalne rodzaje
  3. x- prefiks została zaniechana, jak wspomniano w komentarz
  4. application/json-v2 nie byłby ważny
  5. można powrócić 415 Unsupported Media Type lub po prostu 400 Bad Request
+1

Czy rozważałeś coś w stylu 'application/vnd.mycompany.myapp.customer + json; version = 2.0' –

+2

[415] (https://tools.ietf.org/html/rfc7231#section-6.5.13) oznacza, że ​​** żądanie ładunku ** ma format, który nie jest obsługiwany przez serwer . [406] (https://tools.ietf.org/html/rfc7231#section-6.5.6) lepiej odpowiada potrzebom PO. – sp00m

Powiązane problemy