IPhone用のアプリを開発する予定で、そのアプリはいくつかのSOAPサービスにアクセスする必要があります。 iPhone SDKで基本的なチェックを行っている間、SOAPサービスへのアクセスのサポートを見つけることができませんでしたが、少しのグーグルでSOAPのサポートがないという結論に至りました。 iPhone SDK。
そのため、このアプリを作成したい場合は、iPhoneからSOAPサービスにアクセスする方法を考え出す必要があります。最善のアプローチは何でしょうか?ベストプラクティスはありますか?誰かがiPhone SDKにある機能を使用してSOAPサービスにアクセスするためのライブラリをすでに作成しましたか?
(アクセスする必要があるサービスは別のパーティによって公開されており、SOAPとしてのみ公開しているため、残念ながら別のタイプのインターフェイスに切り替えるオプションはありません(例:RESTベースのAPI)。
下呂
一言:しないでください。
もちろん、それは本当の答えではありません。ただし、SOAPは引き続き避けてください。 ;-) iPhoneとWebサービスの間にプロキシサーバーを追加することはできますか?おそらく、あなたのためにRESTをSOAPに変換するものでしょうか?
あなたcouldを試してください CSOAP 、libxml2に依存するSOAPライブラリ( iPhone SDK)。
OSX用に独自の SOAPフレームワーク を作成しました。ただし、アクティブに維持されておらず、iPhoneに移植するのに時間がかかります(開始するにはNSXMLを TouchXML に置き換える必要があります)
私の解決策は、PHPを使用して、プロキシサーバーでRESTを受け入れ、SOAPリクエストを発行し、結果を返すことでした。
実装時間:15〜30分。
最もエレガントではありませんが、しっかりしています。
私はこれまで、Objective-CからのSOAPスタイルの要求を時折行う必要性に対処するために、低レベル(XML生成および解析)で独自のアクセスをロールしました。とはいえ、SOAPClient( soapclient )というライブラリがあり、オープンソース(BSDライセンス)であり、Google Code( mac-soapclient )で利用できます。
APIを使用したことがない、またはAPIを使用したことがないため、その機能や有効性については証明しませんが、使用可能であり、ニーズに応じて迅速な解決策を提供する場合があります。
Appleはかつて、WS-MakeStubsと呼ばれる非常に壊れたユーティリティを持っていました。 iPhoneで利用できるとは思いませんが、それを置き換えるためのオープンソースライブラリに興味があるかもしれません。コードはSOAPクライアントと対話するためにObjective-Cを生成します。繰り返しますが、私はそれを使用していません-しかし、メモに書き留めました: wsdl2objc
SOAPサービス形式を使用してAPI呼び出しを実行するSwift 4サンプルコードを次に示します。
func callSOAPWSToGetData() {
let strSOAPMessage =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<soap:Body>" +
"<CelsiusToFahrenheit xmlns=\"http://www.yourapi.com/webservices/\">" +
"<Celsius>50</Celsius>" +
"</CelsiusToFahrenheit>" +
"</soap:Body>" +
"</soap:Envelope>"
guard let url = URL.init(string: "http://www.example.org") else {
return
}
var request = URLRequest.init(url: url)
let length = (strSOAPMessage as NSString).length
request.addValue("application/soap+xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.addValue("http://www.yourapi.com/webservices/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
request.addValue(String(length), forHTTPHeaderField: "Content-Length")
request.httpMethod = "POST"
request.httpBody = strSOAPMessage.data(using: .utf8)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request) { (data, response, error) in
guard let responseData = data else {
print("Error: did not receive data")
return
}
guard error == nil else {
print("error calling GET on /todos/1")
print(error ?? "")
return
}
print(responseData)
let strData = String.init(data: responseData, encoding: .utf8)
print(strData ?? "")
}
task.resume()
}
私が見つけたツールを使用して接続できます http://www.wsdl2code.com
SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR
URL" AndDelegate:self];
[proxy GetDouble];
[proxy GetEnum];
[proxy getEnum:kTestEnumTestEnum2];
[proxy GetInt16];
[proxy GetInt32];
[proxy GetInt64];
[proxy GetString];
[proxy getListStrings];
Ios_pluginの下のダウンロードパッケージに2つのiOSの例を含む gsoap をご覧ください。このツールは、WSDLをSOAPおよびXML RESTのコードに変換します。
こちらのリンク とそのロードマップをご覧ください。途中にRO | Cがあり、おそらくSOAPを含むWebサービスに接続できます(間違いなくVCLバージョンを使用しています)。