2008-12-01 30 views
3

請告訴你是否可以。哪種XML結構最適合全方位的API?

我正在構建一個短信網絡服務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接口,無論是技術的後端。如果你選擇一個,請支持你的答案。

+0

將xml放入代碼中,以便下次可以看到它。 – dacracot 2008-12-01 22:59:58

回答

4

接口A.

界面B是本質上只是一個鍵/值的列表,其中作爲接口A取的XML的結構化性質的優勢,並提供通過該結構的意思。

例如:ClientId是消息的屬性,而不是請求本身。從A看,但從B看不清楚。

1

接口A.它更短。

1

接口A ...我是標籤內容屬性的粉絲。

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="123456789">hello jane</Request> 
</Message> 
+0

感謝您修改界面A的方式,我現在認識到其他可能性。再次感謝。 – 2008-12-02 05:41:39

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="123456789"><![CDATA[hello jane]]></Request> 
</Message> 

這樣,如果用戶從XML角度嵌入非法字符,您將受到保護。

+0

除非用戶嵌入「]]」。當然,正確的做法是逃避消息文本! – 2008-12-02 01:27:04

2

有幾件事情,在界面B1的界面中的說話:

  • 它更容易使用的架構/ DTD(尤其是文本內容的類型取決於元素)
  • 檢查結構更清晰
  • 更容易通過的XPath通過它來搜索,並通過XSLT轉換
  • 更容易結合到類,如果你是到這樣的事情

當然,你可能可以通過接口B實現上面提到的所有事情,但這會變得更加麻煩。

如果需要,可以由客戶填寫任意元數據,你可以隨時與鍵/值的孩子一個元素添加到所有技術上的原因除了接口A.

,我認爲一個界面的設計更美觀。在界面B中,標籤基本上是無用的,因爲它們都是一樣的。因此,所有mmtag字符串都是自重。

+0

感謝您的意見和接口A的其他突出優點。 – 2008-12-02 05:43:21

1

接口A,其他人已經概述的所有原因。但我建議的toAddress是元素,允許發送到多個的toAddress的相同的消息:

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

作爲一個吹毛求疵,我建議使用屬性鉛小寫,和元素鉛大寫...但那只是我。

+0

您好,在這種情況下添加refno作爲實體元素將不起作用,因爲每個SMS都是唯一的事務,並且Refno用於標識每個唯一的事務。感謝雖然你輸入。 – 2008-12-02 05:39:32