0

新しい API を設計していて、いくつかの決定に苦労しています。SOAP と REST の比較に関するブログをたくさん読みましたが、ガイドラインとして一般的な API (Paypal、Amazon など) を使用しました。

API には 2 つのエンドポイントがありました。1 つは SOAP 用で、もう 1 つは REST (XML) 用です。SOAP はかなり良さそうに見えますが、XML インターフェースはやや奇妙に見えます。一部のタグに名前空間が含まれていたため、「奇妙な」と呼んでいます。例えば:

【サンプル1】

<EnvelopeRequest xmlns:c1='http://foobar/CarrierX'>
    <Weight>1.0</Weight>
    <PostmarkDate>5/3/2013</PostmarkDate>
    <c1:ShippingMethod>Ground</c1:ShippingMethod>
    <c1:Notification>a@b.com</c1:Notification>
</EnvelopeRequest>

【サンプル2】

<EnvelopeRequest xmlns:cs='http://foobar/SpecialCarrier'>
    <Weight>1.0</Weight>
    <PostmarkDate>5/3/2013</PostmarkDate>
    <cs:Shape>Flat</cs:Shape>
</EnvelopeRequest>

XML インターフェースに名前空間がある理由は、クラス定義から自動生成されるためです (これにはいくつかの継承があります)。ところで、WCFを使用しています。これは、SOAP (WSDL が同じクラスから派生したもの) では問題なく機能します。SOAP はクライアント プロキシのすべての醜さを隠すためです。しかし、多くの REST/XML サービスを調べた結果、名前空間があまり頻繁に使用されているのを見たことがないと思います。近い将来、JSON インターフェースが欲しいと思っていて、JSON は名前空間をサポートしていないので、これもちょっと怖いです。

API を SOAP フレンドリーにするという私の決定は、多くのお客様が SOAP で成功するエンタープライズ ソリューションを使用しているという事実に基づいています。しかし最近、新しいクライアントがより頻繁に採用するように見える Python と Ruby の人気が高まるにつれて、私は自分の最初の決定を推測し始めています。主に気になるのは XML インターフェースの名前空間ですが、それは本当に問題なのでしょうか? REST/XML API の名前空間は、設計を変更する必要があるほど大きな禁止事項ですか?

デザインを変更した場合、(前の 2 つの) リクエストは次のようになります。

【サンプル1】

<EnvelopeRequest>
    <Weight>1.0</Weight>
    <PostmarkDate>5/3/2013</PostmarkDate>
    <CarrierX>
        <ShippingMethod>Ground</ShippingMethod>
        <Notification>a@b.com</Notification>
    </CarrierX>
</EnvelopeRequest>

【サンプル2】

<EnvelopeRequest>
    <Weight>1.0</Weight>
    <PostmarkDate>5/3/2013</PostmarkDate>
    <SpecialCarrier>
        <Shape>Flat</Shape>
    </SpecialCarrier>
</EnvelopeRequest>

はい、これにより、将来的に JSON インターフェースを使用できるようになります。

4

2 に答える 2

2

名前空間を削除すると、特定のメッセージがあいまいになる可能性が生じる場合、問題が発生します。(コードまたはメッセージを読む人によって) 複数の方法で解釈される可能性EnvelopeRequestのある要素を含むメッセージをどこかで誰かが作成することは可能ですか? Shape名前空間を導入する理由は、この可能性を排除するためです。WCF の auto-generator のようなツールは、一般的なケースではこの質問に答えることができないため、注意が必要です。

考えられる有効なメッセージのセットを知ることができるのは、あなただけです。私の経験では、通常、ユーザー/クライアントを混乱させないために名前空間を削除することをお勧めします。その設定を変更する理由はいくつかあります。

  • メッセージ形式が広く使用され、他の形式と混在することを期待しています。(良い例は Atom シンジケーション形式です)
  • 私は他の誰かが広く使用している (そして名前空間が設定されている) 形式を使用しており、それを自分の形式と混ぜ合わせることを計画しています (たとえば、メッセージ内に XHTML を埋め込むなど)。
  • 特定の形式のメッセージを同じ形式のメッセージ内に埋め込むことを期待しています (たとえば、XSLT スタイルシートを生成する XSLT スタイルシート)。

後者の場合、名前空間を使用して、異なる接頭辞を使用して内部メッセージをそれを運ぶメッセージから分離すると便利です (絶対に必要というわけではありません)。これらのケースのいずれも、あまり当てはまらないと思います。

于 2013-05-04T01:13:51.623 に答える
0

そもそも名前空間がある理由を考えてみます。それらはいくつかの奇妙なペイロードです。

しかし、それを無視して、いいえ、名前空間は大したことではありません。名前空間は XPath や XSL と衝突することはほとんど避けられませんが (それらは名前空間を認識している傾向があるため)、ドキュメントを大量に消費する場合、多くの場合、人々は名前空間コンポーネントを完全に無視するだけなので、最終的には違いはありません。

意味的にクリーンアップするために名前空間をクリーンアップしますが、必ずしも消費者のためにではありません。実用的な観点からは、それほど大きな問題ではありません。

于 2013-05-03T23:44:26.553 に答える