我有一個RESTful API支持實體上的CRUD操作。我應該有單一的xsd文件來定義所有CRUD操作的模式嗎?對於支持CRUD操作的RESTful API,我應該擁有單個還是多個複雜類型?
我問這個問題的原因是,我有一些只與檢索調用相關的字段,而不是用於創建或更新。在這種情況下,我是否應該有一個xsd文件並忽略創建和更新的某些字段?
我有一個RESTful API支持實體上的CRUD操作。我應該有單一的xsd文件來定義所有CRUD操作的模式嗎?對於支持CRUD操作的RESTful API,我應該擁有單個還是多個複雜類型?
我問這個問題的原因是,我有一些只與檢索調用相關的字段,而不是用於創建或更新。在這種情況下,我是否應該有一個xsd文件並忽略創建和更新的某些字段?
你的問題似乎將字段的使用與XSD文件的數量聯繫在一起,這讓我覺得你可能在一些基本的XSD概念上缺少。
比方說,你的問題是,對於一個給定的實體,您可以檢索更領域比你可以更新;說明在一個虛構的Person
的實體,您可以[R(etrieve)的Name
,Address
,Date of Birth
和Registered Since
屬性,尚未Ç(reate)的實體,您只允許Name
,Address
和Date of Birth
- 你想要的後端系統設置Registered Since
屬性。要求是儘可能地限制XSD,以提高模型的自描述性。
您可以通過創建XSD基本類型來實現這些場景的分離,然後使用其他類型進行擴展,然後再包含所需的額外字段。您可以在單個文件或兩個或更多不同文件中執行此類操作。
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="PersonBase">
<xsd:sequence>
<xsd:element name="Name"/>
<xsd:element name="Address"/>
<xsd:element name="DateOfBirth"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="PersonToRetrieve">
<xsd:complexContent>
<xsd:extension base="PersonBase">
<xsd:sequence>
<xsd:element name="RegisteredSince"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
注意:上面的XSD不intented說明XSD最佳實踐
如果擴展/限制並不在您的環境允許,你可以憑藉xsd:group
實現再利用 - 它不改變我的觀點。所以,我基本上說,你問這個問題的原因 - I have some fields that are relevant only for Retrieve calls and not for Create or Update.
- 對XSD文件的數量沒有任何影響......除非你考慮更多的變量。我會嘗試一些浮現在我的腦海裏,但我不打算提供一個詳盡的清單:
如果您對不同的調用有不同的字段,那麼您應該使用不同的XSD文件,但是如果根據CRUD操作只留下一些空白字段,則不需要創建不同的文件。未使用的字段將在那裏,但它們只會留空。
根據不同的操作,但可在這些方式中的一種治療領域:
對於簡單情況,我將使用單個模式元素來定義實體。我將解決文檔中字段的實際用法。
當不同操作使用實體時存在巨大差異時,單獨的實體可能是合適的。例如,管理員的檢索客戶操作可能會返回更多關於客戶的信息,而不是普通用戶可用的信息。如果這種差異很大,如果定義了單獨的實體,每個人都會更容易。您可以使用模式擴展來擴展基本實體,或者只需複製並粘貼基本實體中的字段,無論您的環境是否工作。
PS。大多數Web服務堆棧,至少在JAX-RS和JAX-WS中,默認情況下不強制實施模式合規性。檢查Web服務代碼中字段的有效性是一個好主意。
我想問一下「有多少個XSD文件?」你真的在問「多少個單獨的元素或複雜的類型」。你能解決這個問題嗎?文件數目沒有相關性,除非我完全錯過了這個問題。 – RajV 2012-08-24 13:47:33
感謝您的糾正,我編輯了這個問題。 – 2012-08-27 02:16:49