SOAPとREST

# SOAPとREST
##参考URL
・Webサービス Web APIのまとめ 
　http://skill-note.net/post-666/
・今さら聞けないWebAPIの実装方式RESTとSOAPの違い
　https://qiita.com/pink/items/f1a22840619d3b79c4f2
・SOAP と REST の違い
　http://freed411.doorblog.jp/archives/30018661.html
##REST
REpresentational State Transferの略。
ネットワーク上のコンテンツ(リソース)を一意なURLで表すのが基本。
各リソース（URL）に対してGET,POST,PUT,DELETEでリクエストを送信しレスポンスをXMLやjsonなどで受け取る形式
⇒レスポンスのフォーマット形式は指定されていないが、XMLが利用されることは少なく、ほぼjson

RESTはURLがリソースに対応づけられるためURLは名詞的になることが多い。
また、Webブラウザで容易に動作確認ができることが最大の特徴、メリットで、わざわざテスト用アプリを作る必要がない。
デメリットとしては、リクエストがURLにパラメータを追加する形となるため、パラメータの数に比例してURLが長くなる危険性がある。
###RESTの定義
・WADL（あまり使用されていない）（Spring MVCでは対応していない）
　https://tc.hatenablog.com/entry/2015/01/24/134040
###RESTの設計原則
・アドレス指定可能なURIで公開されていること
・インターフェース(HTTPメソッドの利用)の統一がされていること
・ステートレスであること
・処理結果がHTTPステータスコードで通知されること
###参考URL
・REST入門 基礎知識
　https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa
・REST APIとは？ – API設計のポイント！
　http://wp.tech-style.info/archives/683
・0からREST APIについて調べてみた
　https://qiita.com/masato44gm/items/dffb8281536ad321fb08
・REST、Web サービス、そして RESTful なサービス
　https://www.ibm.com/developerworks/jp/webservices/library/ws-RESTservices/index.html
##SOAP
SimpleObject Access Protocolの略。
リクエストおよびレスポンスともにXMLフォーマットのデータで行う形式。
SOAPのURLは操作と対応づけられるため、URLの命名が動詞的になることが多い。
###実装方法について
・クラスのインターフェース定義から WSDL を生成 ＝ ボトムアップ
　.NETの開発に多いが、Javaでも増えてきている
　・java2wsdl
　・disco
・WSDL インターフェース記述からクラス・スケルトンを生成 ＝ トップダウン
　Javaの開発はおもにこちら
　・wsdl2java
　・wsimport
　・wsdl
###参考URL
・正しい知識としてのSOAP
　https://qiita.com/Urushibara01/items/f19a9489c08313b9fdde
・Spring WS(WebService)でSOAPリクエストを受け取るための設定
　https://qiita.com/mugi_uno/items/42bbc2bdd6af5bbf3f36


#SOAP、REST双方を使用する開発
##開発の順序
１．XMLデータ構造の定義決定
２．SOAPのみが使用するWSDLの作成
　　スキーマやWSDLを記述するのは大変だが、特定のツールへの依存を回避やメンテナンス性の確保のため、自動生成に頼らない方が確実
　　★SOAPを作成すれば自動的にRESTにも対応してくれるミドルウエアもある。
　　（Axis2, .net Framework等）
３．RESTの入出力サンプルの作成
##参考URL
・3.8 Web 2.0時代のWebServices ～SOAP/REST使い分けの指針
　http://xmlconsortium.org/wg/web2.0/teigensho/4--REST-SOAP.html


#ソースコードとWSDL
##ソースコードからWSDLの作成
###eclipseからWSDLの自動生成⇒java2wsdlコマンドを使用する
以下の手順でWSDLを作成すると、eclipse上でWebサービス・エクスプローラを使用してUnitTestを実施可能
　１．作成したjavaファイルをeclipseのプロジェクトエクスプローラ上で右クリック
　２．Webサービス＞Webサービスの作成
　３．ボトムアップでJavaプロキシのWebサービスを作成
###参考URL
・WSDL自動生成 
　https://bayside.hatenablog.com/entry/20051025/p1
・いまさら聞けない「Webサービス」の常識 (3/4)-【3】EclipseでJavaクラスからWSDL、Webサービスのインターフェイス実装コードを自動生成
　https://www.atmarkit.co.jp/ait/articles/1002/26/news094_3.html
##WSDLからソースコードの作成
###参考URL
・WSDL ファイルからの JAX-WS クライアントの開発
　https://www.ibm.com/support/knowledgecenter/ja/SS7K4U_8.5.5/com.ibm.websphere.zseries.doc/ae/twbs_jaxwsclientfromwsdl.html
・[Java] Axis2を使いWSDLからWEBサービスとクライアントを作成
　http://d.hatena.ne.jp/modalblue/20080817/1218971413


#SOAPUIを使用したUnitTest
SOAPUIではSOAP、REST問わずユニットテストの実行が可能
★参考になりそうなサンプル★（Java,Spring Boot,JSONデータ取得のREST方式で実装）
・REST・SOAP・(MQ) テストツール SoapUI を使ってみた
　https://www.project-respite.com/soapui-starter/
##RESTでのテスト手順
１．作成したJavaProjectのimport
２．project.xmlの読み込み
３．取り込んだプロジェクトを開き、「モック作成」を選ぶ
４．返却アクションから「POST」を選択
５．ダイアログボックスにレスポンスのリソースパスとその内容を記述する
６．レスポンスエディタを開き、ステータスコードとそのレスポンスの内容を設定する
★デメリット
RESTのレスポンスはxml形式ではないため、SoapUIからテストケースごとに一つ一つレスポンスを設定する必要がある。
事前に返却結果となるjsonを用意しておくことはできるが、xml形式のように
xmlを作る→貼り付ける→実行する
とテンポよく進められなさそう。
###参考URL
・Getting Started with REST Testing in SoapUI 
　https://www.soapui.org/rest-testing/getting-started.html　　
##参考URL
・SOAP UI
　https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/PD+Professional/page/SOAP+UI
・[Soap UI]Webサービスのテストツール 
　http://skill-note.net/post-202/
・RESTのMockテストにSoapUIを使うには 
　http://begirama.hatenablog.com/entry/2013/03/07/021638
・SOAP UIのMock Serviceを使った効率的なWebサービスのテスト
　http://begirama.hatenablog.com/entry/20120709/1341820969
・SOAP UIのTestSuite機能を使ったWebサービスのテスト自動化
　http://begirama.hatenablog.com/entry/2012/07/31/162202
・SoapUIを使った通信処理のテスト（送信先サーバをモックする）
　https://seri.hatenablog.com/entry/2015/05/13/175312
・soapUIを用いたWSS(WebServiceServer)テスト
　https://www.brainsellers.com/blog/inastream/2010/10/soapuiwsswebserviceserver.html
・RESTful Mocking Overview 
　https://www.soapui.org/rest-testing-mocking/service-mocking-overview.html


#WAS7とsoap
　アノテーションによって大幅に単純化
　WebSphere Application Server V7 の JAX-WS 実装では、★SOAP 1.2★をサポート
##参考URL
・WebSphere Application Server V7 の新機能
　https://www.ibm.com/developerworks/jp/websphere/library/was/was7_new/


#その他参考
・統合開発環境でWebサービスを作る
　https://www.atmarkit.co.jp/ait/articles/0305/21/news003_4.html
・Websphereのweb.xml
　https://blog.goo.ne.jp/nokonoko2006/e/35348798f511976290a668bd0b077039