哪种XML结构最适合全面的API?

时间:2008-12-01 22:57:31

标签: xml api sms

请告知是否可以。

我正在构建一个SMS网络服务API,允许人们发送短信到他们想要的手机号码。请求将发送到界面,然后我们会根据提供的帐户详细信息和帐户中可用的信用额处理该请求。

我们有两个建议的XML结构用于接口请求,我希望你建议哪一个更好,因为我们正在互相讨论它。

接口A

print("<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
        <Message version="1.0">
            <ClientID>11111</ClientID>
            <PassPhrase>shjfkh</PassPhrase>
            <Request Type="sms" Refno="10" ToAddress="27732687745332">
                <Content>
                      hello world
                </Content>
            </Request>
        </Message> ");

接口B

 print("<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
    <Message>
        <mmtag name="Version">1.0</mmtag>
        <mmtag name="ClientID">1001</mmtag>
        <mmtag name="RefNO">120</mmtag>
        <mmtag name="Encoding">base64</mmtag>
        <mmtag name="Type">SMS</mmtag>
        <mmtag name="Content">hello world</mmtag>
        <mmtag name="MSISDN">27781010102</mmtag>        
    </Message>");

现在,看看这两个例子,你认为它们最适合我们的API接口,而不管后端的技术如何。如果您选择一个,请支持您的答案。

8 个答案:

答案 0 :(得分:4)

接口A.

接口B本质上只是一个键/值列表,其中接口A利用了XML的结构化特性并通过结构提供了意义。

例如:ClientId是Message的属性,而不是Request本身。从A看,但不是B,这一点很清楚。

答案 1 :(得分:2)

我会进一步修改......

<Message version="1.0" clientID="11111" passPhrase="shjfkh">
    <Request Type="sms" Refno="10" ToAddress="27732687745332">hello world</Request>
</Message>

这允许结构暗示每个消息块有多个消息的可能性。

<Message version="1.0" clientID="11111" passPhrase="shjfkh">
    <Request Type="sms" Refno="10" ToAddress="27732687745332">hello john</Request>
    <Request Type="sms" Refno="11" ToAddress="12345678901234">hello jane</Request>
</Message>

答案 2 :(得分:2)

另一点,你可能应该将实际的消息包含在CDATA中,以便它与XML分开。像这样......

<Message version="1.0" clientID="11111" passPhrase="shjfkh">
    <Request Type="sms" Refno="10" ToAddress="27732687745332"><![CDATA[hello john]]></Request>
    <Request Type="sms" Refno="11" ToAddress="12345678901234"><![CDATA[hello jane]]></Request>
</Message>

这样,如果用户从XML透视图中嵌入非法字符,您将受到保护。

答案 3 :(得分:2)

接口A有几个与接口B相关的东西:

  • 使用架构/ DTD检查更容易(特别是如果文本内容的类型取决于元素)
  • 结构更清晰
  • 通过XPath搜索并通过XSLT
  • 进行搜索更容易
  • 更容易绑定到类,如果你遇到这样的事情

当然,你可以用接口B实现上面提到的所有东西,但是它会更加麻烦。

如果您需要可由客户端填充的任意元数据,您始终可以将具有键/值子元素的元素添加到接口A.

除了所有技术原因外,我认为界面A的设计在美学上更令人愉悦。在界面B中,标签基本上是无用的,因为它们都是相同的。因此,所有mmtag字符串都是自重。

答案 4 :(得分:1)

接口A.它更短。

答案 5 :(得分:1)

界面A ......我喜欢标签内容的属性。

答案 6 :(得分:1)

我想说第二种情况更难阅读,因为它隐藏了属性中的实现细节。

答案 7 :(得分:1)

接口A,由于其他人概述的所有原因。但我建议T​​oAddress是一个元素,允许发送到多个ToAddress的相同消息:

<Request Type="sms" Refno="10">
  <To>27732687745332</To>
  <To>1234567890</To>
  <Content>Hello world</Content>
  </Request>

作为一个挑剔者,我建议属性使用小写字母,元素是大写字母......但这只是我。