2013-09-23 9 views
24

Ho letto molti degli overflow dello stack (e di altri) sui servizi RESTful di versioning. È un po 'travolgente, ad essere onesti.Tipi MIME del fornitore (per il controllo delle versioni API)

Ho deciso di utilizzare un'intestazione Accept: per il nostro servizio (marginalmente) RESTful in modo che i client possano richiedere versioni specifiche di una risorsa. Quello su cui non sono chiaro è cosa specificare nell'intestazione Accept.

L'esempio che ho visto spesso è questa:

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

Le mie domande sono:

  1. Sono corretto che tutti i tipi VND devono essere registrati? (http://www.iana.org/cgi-bin/mediatypes.pl)

  2. La versione e il tipo (cioè -v2 + json) fanno parte del tipo e quindi è necessario registrare ogni versione e tipo?

  3. C'è qualche motivo per usare vnd invece di un sottotipo "x-" che non ha bisogno di essere registrato? Ad esempio:

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

    L'API esistente è solo interna, ma in futuro sarà esposta ai clienti.

  4. Non è sicuro che ciò abbia senso, ma è possibile utilizzare un tipo esistente ma aggiungere una versione? (L'API corrente restituisce "application/json")

    Accept: application/json-v2 
    
  5. Quali sono formati accettabili per aggiungendo una versione e del tipo (ad esempio -v2 + JSON).

  6. Cosa succede se un client richiede una versione non supportata? La risposta corretta è 406? Il cliente può richiedere qualsiasi versione? O più in generale, cosa succede se il client non fornisce l'intestazione Accept o Accept: */*?

Qualsiasi suggerimento aggiuntivo benvenuto. L'obiettivo, ovviamente, è quello di consentire modifiche a ciò che il servizio restituisce per una determinata risorsa, ma non a rompere i client esistenti.

Ecco un breve elenco di risorse Ho guardato di recente:

+1

Il prefisso x- è stato deprecato. Se fosse ancora in uso, avresti effettivamente bisogno di entrambi. Il "vnd". è il prefisso del venditore. È ancora valido e deve essere sempre utilizzato quando si utilizza un tipo MIME specifico del fornitore. – yam655

risposta

3

Come ho deciso di seguire lo standard jsonapi.org, ho deciso di fare solo ciò che il vostro esempio mostra.

quanto riguarda le vostre domande:

  1. tuo tipo MIME deve essere registrato
  2. Credo che ogni versione e tipo devono essere registrati, in quanto sono tipi unici
  3. x- prefisso è stato deprecato come indicato in un commento
  4. application/json-v2 non sarebbe valido
  5. Si potrebbe tornare 415 Unsupported Media Type o semplicemente 400 Bad Request
+1

Hai considerato qualcosa come 'application/vnd.mycompany.myapp.customer + json; version = 2.0' –

+2

[415] (https://tools.ietf.org/html/rfc7231#section-6.5.13) significa che ** il carico utile della richiesta ** è in un formato non supportato dal server . [406] (https://tools.ietf.org/html/rfc7231#section-6.5.6) si adatta meglio alle necessità di OP. – sp00m

Problemi correlati