2012-06-30 83 views
1

我正在使用W3C XML Schema(XSD)來記錄資源。今天,XML表示法在少量資源中返回。對我的某個資源執行POST操作需要來自客戶端的XML。此資源的響應是XML。我的問題如下:REST風格的Web服務:爲相同的資源記錄XML

a)我應該創建一個XSD來處理請求(POST),資源的響應嗎?

b)如果正在使用單個XSD,應如何區分請求(POST)和響應?一個想法圍繞着:

<stream> 
    <request> 
    <items>xxx</items> 
    </request> 
    <response> 
    <stuff>xxx</stuff> 
    </response> 
</stream> 

問題是,我擔心請求/響應標記反映RPC風格的方法。

c)關於POST操作,我想通知客戶端XML是必需的,並且只允許在POST操作期間使用。我懷疑如果這個要求被違反了,我最好的選擇是返回一個400錯誤的請求?除此之外,我認爲我關於XSD的唯一選擇是「通過評論需求記錄」?試圖感受任何XSD設計選項,除了意見之外我應該考慮。當然,一個XSD的挑戰是對GET操作的響應 - 不需要來自客戶端的XML - 要求客戶端'忽略'XML中的POST內容。

預先感謝

回答

0

a)創建一個XSD並限定多種類型內的XSD是好的。 對我來說,在單個XSD中定義請求/響應對似乎是合理的。 請記住XSD的消費者或用戶。它會是誰?您是否期望 API的用戶使用該XSD構建應用程序,或者服務器(接收)方僅使用 以驗證請求進入時的驗證?

在許多情況下,在REST API中交換的消息沒有在模式文檔中正式定義。而是將它們記錄在HTML頁面中,然後公司提供一個API測試頁面,他們可以在其中查看示例請求和響應。這是記錄API的非常實用的方式。有關此示例,請參閱https://api.stackexchange.com/docs/answers


b)區分請求和響應我想你會在XSD中使用不同的元素類型。也許我不瞭解這個問題。


C)返回400是完全合理的,如果該請求是錯誤的內容類型,不包括XML文檔,或XML文檔不符合所要求的模式。如果你返回一個400,這是一個好主意,還返回消息體,有一個XML文檔,讓更多的信息:

<response> 
    <error> 
    <code>101.4.c</code> 
    <description>your request did not include an XML document</description> 
    <link>http://example.com/errorinfo?code=101.4.c</link> 
    </error> 
</response> 

更多關於REST API的設計,看http://dinochiesa.net/?p=192