新しい 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 インターフェースを使用できるようになります。