3 Stimmen

Welche XML-Struktur eignet sich am besten für eine Allround-API?

Bitte beraten Sie mich, wenn Sie können.

Ich baue eine SMS-Webdienst-API auf, die es Menschen ermöglicht, SMS an ihre gewünschten Handynummern zu senden. Eine Anfrage wird an die Schnittstelle gesendet, die wir dann auf der Grundlage der angegebenen Kontodaten und des auf dem Konto verfügbaren Guthabens verarbeiten.

Wir haben zwei vorgeschlagene XML-Strukturen für die Schnittstellenanforderung, und ich möchte Sie bitten, uns mitzuteilen, welche davon besser ist, da wir uns gegenseitig an die Gurgel gehen.

Schnittstelle 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> ");

Schnittstelle 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>");

Welche der beiden Beispiele würde sich Ihrer Meinung nach am besten für unsere API-Schnittstelle eignen, unabhängig von der Technologie im Backend? Bitte begründen Sie Ihre Antwort, wenn Sie sich für eines entscheiden.

4voto

jonhy Punkte 66

Schnittstelle A.

Schnittstelle B ist im Wesentlichen nur eine Liste von Schlüsseln/Werten, während Schnittstelle A die Vorteile der strukturierten Natur von XML nutzt und durch die Struktur eine Bedeutung vermittelt.

Zum Beispiel: ClientId ist ein Attribut der Nachricht, nicht der Anfrage selbst. Dies ist klar, wenn man sich A ansieht, aber nicht von B aus.

2voto

dacracot Punkte 21242

Ich würde A weiter überarbeiten...

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

Dies ermöglicht es der Struktur, die Möglichkeit mehrerer Meldungen pro Meldungsblock zu implizieren.

<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>

2voto

dacracot Punkte 21242

Ein weiterer Punkt: Sie sollten die eigentliche Nachricht in CDATA einschließen, damit sie von Ihrem XML getrennt ist. Etwa so...

<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>

Auf diese Weise sind Sie geschützt, wenn der Benutzer illegale Zeichen aus der XML-Perspektive einbettet.

2voto

Torsten Marek Punkte 78610

Es gibt einige Dinge, die für Schnittstelle A gegenüber Schnittstelle B sprechen:

  • es ist einfacher, mit einem Schema/DTD geprüft zu werden (insbesondere wenn der Typ des Textinhalts vom Element abhängt)
  • die Struktur ist klarer
  • es ist einfacher, sie mit XPath zu durchsuchen und mit XSLT zu transformieren
  • leichter an Klassen zu binden, wenn Sie sich für solche Dinge interessieren

Sicherlich können Sie all die oben genannten Dinge auch mit Schnittstelle B erreichen, aber es wird etwas umständlicher sein.

Wenn Sie beliebige Metadaten benötigen, die vom Client gefüllt werden können, können Sie der Schnittstelle A jederzeit ein Element mit Schlüssel/Wert-Kindern hinzufügen.

Abgesehen von allen technischen Gründen finde ich das Design von Schnittstelle A ästhetisch viel ansprechender. In Schnittstelle B sind die Tags im Grunde nutzlos, weil sie alle gleich sind. Daher sind alle mmtag Saiten sind totes Gewicht.

1voto

Shawn Miller Punkte 7007

Schnittstelle A. Sie ist kürzer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X