2012-08-20 30 views
14

this excellent presentation के अनुसार डिजाइन कर RESTful इंटरफेस, संस्करण लागू करने के लिए पसंदीदा तरीका स्वीकार हेडर का उपयोग करने, की तरह कुछ का उपयोग कर रहा है पर:दोनों XML और JSON सामग्री प्रकार के साथ एक RESTful API संस्करण

GET /products HTTP/1.1 
Host: example.com 
Accept: application/vnd.com.myservice.v2+xml 

यह काम करता है एक्सएमएल सामग्री-प्रकार के लिए पूरी तरह से, लेकिन जेएसओएन समकक्ष संस्करण के लिए एक ही योजना का उपयोग करना संभव है?

Ie, के लिए पूछने के लिए यह संभव है:

GET /products HTTP/1.1 
Host: example.com 
Accept: application/vnd.com.myservice.v2+json 
कुछ

प्रतिक्रिया होगी की तरह:

HTTP/1.1 200 OK 
Content-Type: application/vnd.com.myservice.v2+xml; charset=UTF-8 
Allow: GET, POST 

<?xml version="1.0" encoding="utf-8"?> 
<products xmlns="urn:com.example.products" 
      xmlns:xl="http://www.w3.org/1999/xlink"> 
    <product id="1234" xl:type="simple" 
      xl:href="http://example.com/products/1234"> 
    <name>Red Stapler</name> 
    <price currency="EUR">3.14</price> 
    <availability>false</availability> 
    </product> 
</products> 

और JSON समकक्ष (एक तरह से):

HTTP/1.1 200 OK 
Content-Type: application/vnd.com.myservice.v2+json; charset=UTF-8 
Allow: GET, POST 

[ 
    { 
    id: "1234", 
    links: [ 
     { 
     rel: "self", 
     href: "http://example.com/products/1234" 
     } 
    ], 
    name: "Red Stapler", 
    price: { 
     currency: "EUR", 
     value: 3.14 
    }, 
    availability: false 
    } 
] 
+2

+1 उस प्रस्तुति के लिंक के लिए +1 और कुछ नहीं। धन्यवाद। –

उत्तर

16

आप सामग्री प्रकार में कोई संस्करण जोड़कर संस्करण को कार्यान्वित कर सकते हैं:

application/vnd.acme.user-v1+xml 

या आप भी अपने Accept शीर्षक में एक क्वालीफायर उपयोग कर सकते हैं, इस तरह आप अपनी सामग्री प्रकार स्पर्श नहीं करते:

application/vnd.acme.user+xml;v=1 

आप दो भागों में अपनी सामग्री प्रकार application/vnd.acme.user+xml विभाजित कर सकते हैं: पहला एक (application/vnd.acme.user) मीडिया प्रकार का वर्णन करता है, और दूसरा एक (xml) प्रतिक्रिया का प्रारूप। इसका मतलब है कि आप json: application/vnd.acme.user+json जैसे किसी अन्य प्रारूप का उपयोग कर सकते हैं।

हैटओएएस दुनिया में, जेएसओएन जेएसओएन का उपयोग करना चाहते हैं, यदि आप जेएसओएन का उपयोग करना चाहते हैं, तो आप इस विनिर्देशन में रुचि ले सकते हैं: https://github.com/kevinswiber/siren

+0

धन्यवाद। जब क्वालीफायर और एक नए मीडिया प्रकार के बीच निर्णय लेने की बात आती है, तो आप संस्करण के लिए कौन सा पसंद करेंगे और क्यों? – PatrikAkerstrand

+0

मैं सामग्री प्रकार को संशोधित करने से बचने के लिए क्वालीफायर का उपयोग करूंगा। यह सिर्फ मुझे लगता है स्वाद का मामला है। –

5

मुझे पता है कि सबसे साफ तरीका प्रोफाइल का उपयोग कर है। उस के लिए एक आईईटीएफ आरएफसी है (RFC 6381)।

स्वीकृति हेडर का उपयोग करके, इंगित करें कि आप किस प्रकार की प्रतिक्रिया की उम्मीद करते हैं। आप अभी भी क्वालीफायर का उपयोग कर सकते हैं। आप एक या अधिक अल्पविराम से अलग प्रोफ़ाइल के अनुपालन का अनुरोध कर सकते हैं, लेकिन यदि आप एक से अधिक प्रोफ़ाइल निर्दिष्ट करते हैं तो आपको उद्धरणों का उपयोग करना होगा।

स्वीकार करें: एप्लिकेशन/जेसन; प्रोफाइल = "http://profiles.acme.com/user/v/1"

सामग्री प्रकार शीर्ष लेख का उपयोग करना, सर्वर को समान रूप से प्रतिक्रिया कर सकते हैं:

सामग्री प्रकार: आवेदन/json; प्रोफाइल = "http://profiles.acme.com/user/v/1"