Question

Veuillez indiquer si vous le pouvez.

Je construis une API de service Web SMS qui permettra aux gens d'envoyer des SMS à leurs numéros de téléphone cellulaire souhaités. Une demande sera envoyée à l'interface. Nous traiterons ensuite cette demande en fonction des informations de compte fournies et des crédits disponibles sur leur compte.

Nous avons deux structures XML proposées pour la requête d'interface et je voudrais que vous indiquiez laquelle est la meilleure, car nous nous en moquons mutuellement.

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

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

Maintenant, en regardant les deux exemples, lequel, selon vous, conviendrait le mieux à notre interface API, quelle que soit la technologie utilisée en bout de ligne. Veuillez appuyer votre réponse si vous en choisissez un.

Était-ce utile?

La solution

Interface A.

L'interface B est essentiellement une liste de clés / valeurs, l'interface A tirant parti de la nature structurée de XML et fournissant un sens à travers la structure.

Par exemple: ClientId est un attribut du message, pas la demande elle-même. C’est clair en regardant A, mais pas en B.

Autres conseils

Je voudrais réviser un autre ...

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

Ceci permet à la structure d’impliquer la possibilité de plusieurs messages par bloc de messages.

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

Autre chose, vous devriez probablement inclure le message dans CDATA afin qu’il soit séparé de votre XML. Comme ça ...

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

Ainsi, si l'utilisateur incorpore des caractères non autorisés de la perspective XML, vous serez protégé.

Il y a plusieurs choses qui parlent pour l'interface A sur l'interface B:

  • il est plus facile de vérifier avec un schéma / une DTD (surtout si le type du contenu du texte dépend de l'élément)
  • la structure est plus claire
  • il est plus facile de rechercher via XPath et de transformer via XSLT
  • plus facile à lier à des classes, si vous êtes dans de telles choses

Certes, vous pouvez probablement réaliser toutes les choses mentionnées ci-dessus avec l'interface B, mais cela va être plus lourd.

Si vous avez besoin de métadonnées arbitraires pouvant être renseignées par le client, vous pouvez toujours ajouter un élément avec des enfants clé / valeur à l'interface A.

Hormis toutes les raisons techniques, je pense que la conception de l'interface A est beaucoup plus esthétique. Dans l'interface B, les balises sont fondamentalement inutiles, car elles sont toutes identiques. Par conséquent, toutes les chaînes mmtag sont des poids vides.

Interface A. C'est plus court.

Interface A ... Je suis fan d'attributs sur le contenu des balises.

Je dirais que le second cas est plus difficile à lire car il cache des détails d'implémentation dans un attribut.

Interface A, pour toutes les raisons évoquées par les autres. Mais je suggérerais que ToAddress soit un élément, permettant le même message envoyé à plusieurs ToAddress:

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

En tant que médiocre, je suggérerais que les attributs utilisent une minuscule, et les éléments, une majuscule ... mais c'est juste moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top