我试着回答我自己的问题。我希望我能得到更好的答案,但是在这里我的下一个方法有什么问题会很好:
<!-- only updatable fielsds here -->
<xs:complexType name="tProjectBase">
<xs:sequence>
<xs:element name="projectnum" type="xs:string" minOccurs="0" />
<xs:element name="description" type="xs:string" minOccurs="0" />
<xs:element name="accepteddate" type="xs:dateTime" minOccurs="0" />
<xs:element name="activeyears" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<!-- extending updateble with keys and not updateble -->
<xs:complexType name="tProject">
<xs:complexContent>
<xs:extension base="tProjectBase">
<xs:sequence>
<xs:element name="id" type="xs:int" />
<xs:element name="projectname" type="member"/>
<xs:element name="projectcreator" type="xs:string" /> <!--not updatable-->
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- only keys here -->
<xs:complexType name="tProjectKeys">
<xs:choice>
<xs:element name="id" type="xs:int"/>
<xs:element name="projectname" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:element name="tUpdateProject">
<xs:complexType>
<xs:sequence>
<xs:element name="keys" type="tProjectKeys" />
<xs:element name="project" type="tProjectBase" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tCreateProject">
<xs:complexType>
<xs:sequence>
<xs:element name="projectcreator" type="xs:string />
<xs:element name="project" type="tProjectBase" />
</xs:sequence>
</xs:complexType>
</xs:element>
获取项目
- 请求 = tProjectKeys
- 响应 = tProject
更新项目
- 请求 = tUpdateProject
- response = nothing(所有消息都应该有具有状态的标头)
创建项目
- 请求 = tCreateProject
- response = 创建项目的id
这种方法也存在问题。例如,现在密钥是“硬编码的”。如果某些客户将 projectnum 设为唯一并希望将其用作从外部系统更新项目的关键,该怎么办。也许这就是他们的外部系统使用的信息。所以原题的方案更加灵活。但该走哪条路?