2011-12-22 18 views
8

これはスタックオーバーフローに関する何度も繰り返される質問です。私はこれについて多くの回答を読んでいますが、まだ混乱しています。SOAPとRESTはXML/JSONレスポンスでどのように動作しますか?

私はiPhone SDKからwebservicesを呼び出す必要があります。

ここに私の質問は以下のとおりです。

  1. 私は何の応答SOAPやRESTは、レスポンスがXMLであるならば、私たちはRESTとJSONあれば、私たちが使用するSOAPを使用する必要があること、特定の何かをそこreturn.Is明確ではないのですか?

  2. SOAPとRESTのASIHTTPの役割は何ですか?

  3. 私は手でそれを解析する必要がありますか私は

<oproduct> 
    <iid>113133791</iid> 
    <icategoryid>270</icategoryid> 
    <imerchantid>1547</imerchantid> 
    <iadult>0</iadult> 
    <sname>The Ashes/1st Test - England v Australia - Day 1</sname> 
    <sawdeeplink>http://www.acbcd.com/pclick.php?p=113133791&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink> 
    <sawthumburl>http://images.abcdd.com/thumb/1547/113133791.jpg</sawthumburl> 
    <fprice>69.99</fprice> 
    </oproduct> 

としてXML応答を取得していますか?またはXMLレスポンスをどのように処理するのですか?

私はRESTとSOAPについて非常に多くの記事を持っていますが、それを理解するための適切なコードはありません。 私はこれらの質問に関する助けに感謝します。

答えて

71

SOAP - 「シンプル・オブジェクト・アクセス・プロトコル」

SOAPは、インターネット上で、メッセージ、または情報の少量を転写する方法です。 SOAPメッセージはXMLでフォーマットされ、通常HTTP(ハイパーテキスト転送プロトコル)を使用して送信されます。

SOAPには、メッセージの送信方法の標準があります。

各SOAPサービスは、転送されるSOAP XMLのスキーマの一種であるWSDL(Web Service Definition Language)で定義できます。

WSDL(Webサービス定義)をネイティブコードに変換するためのツールが多数あります。

にObjCのために利用可能なツールの一つは、WebサービスにアクセスするためにObjCコードに任意のWebサービスのWDSLを変換Sudz-C(http://sudzc.com/あります。


休憩 - のRepresentational State転送

残りは、クライアントとサーバー間でデータを送受信するための簡単な方法であり、それは定義された任意の多くの基準を持っていない、あなたは、データを送受信することができますJSON、XML、さらにはテキスト。その軽さはSOAPに比べて重くなっています。 iOSの中で休息を処理するために

利用可能な多くのツールがありますが、私は両方のXMLやJSONを扱うため、RestKit http://restkit.org/をお勧めします。

私はその軽量SOAP vs REST

以来、モバイル開発のための休憩で行くことにあなたを示唆していないことにより、XMLを読むための他のオプションは何

+5

これは素晴らしいです。 –

+0

@ jshin47ありがとう – Nakkeeran

+10

+1面白い画像;) –

1

1)SOAPレスポンスはXMLでなければならず、レスポンスXML(非効率的)に埋め込むか、SOAP添付ファイル(難しい)を使用する必要があります。 SOAP応答はsoapエンベロープタグに含まれ、通常は関連するwsdlがあります。表示しているXMLがすべて取得している場合は、SOAPサービスではない可能性があります。私はXML内のリンクを参照するので、RESTを覚えていることを示す良い兆候です。

2)ASIHTTPについて聞いたことがありません。クイックグーグル、それはiOSのhttpインターフェイスをラップするサードパーティのライブラリのように見えます。私はそれが必要ではないかもしれないと示唆していますが、それを使ってhttpリクエストを作成するのに役立つようです。 httpライブラリを直接使用して評価する必要があります。

3)何とか解析する必要があります。あなたは手でそれをすることができますが、それは一般的には本当に悪い考えです。 XMLはさまざまな形で提供され、同じ意味を持ちますが、すべてのフォームをサポートしていない場合、Webサービスプロバイダは、セマンティクスが同じであっても、XMLの書式設定が異なると、 XMLを読むには、XML APIを使用します。 DOM APIはそれをツリー形式で読み込み、XPathを使ってツリーから情報を抽出することができます。

+0

(簡単な例私が間違っている場合は、人々が私を修正)ハンド? NSXMLではなくTouchXMLですか?なぜなら、私はNSXMLを使用して手作業で '(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName属性を使用して、 )atributeDict {IF([がelementName isEqualToString: "NoOfObjectsDetected" @]) {noOfObjetcsArray = [NSMutableArrayのALLOC] initwithcapacity:0]。 elementNameStr = elementName; } } 'メソッド – Heena

+0

私はNSXMLに慣れていませんが、xmlからツリー構造が作成されているように見えるので、「手で解析する」とは言いません。あなたがそれに精通しているなら、それのために行く。 – Bill

+0

私は "手作業での解析"を理解していますが、私はすでに問題のツリー構造を知っています。私は以前のコメントで上記の方法を使ってそれぞれのタグを1つずつ構文解析しています – Heena

5

オクラホマので、あなたはここで、いくつかの異なる質問がある:

  1. RESTは Webサービスにアクセスするの方法です。 SOAPはWebサービスにアクセスする別の方法です。 RESTはクエリ文字列またはURL形式を使用し、SOAPはXMLを使用します。 JSONとXMLは、データを返信する2つの異なる方法です。 SOAPとXMLは通常互いに関連付けられます。モバイルアプリでは通常、REST/JSONを使用します。実装と保守が容易で、電信など多くのサービスを提供します。

  2. ASIHTTPは、ビルノートとして、ラッパーです。必要なものに応じて同様のことをする他の選択肢があります。 REST/JSONを使用している場合は、NSURLConnection + SBJSONがこのトリックを行うかもしれませんが、私は個人的に好きです。

  3. SOAPサービスに使用可能なWSDLがある場合は、wsdl2objcを使用して、解析とフェッチのコードを自動的に作成できます。 @「芥屋」:(repsonseのid jsonElement){ self.propertyA = [jsonElement valueForKeyため

    :それはJSONサービスであるか、またはWSDLが利用できない場合、私はSBJSONを使用して、単純に次のように解析する推薦します]; self.propertyB = [jsonElement valueForKey:@ "keyB"]; }

希望します。

関連する問題