// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Webサービス入門
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Webサービス入門 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Webサービス入門

このドキュメントでは、NetBeans IDEがサポートするWebサービスの概念と技術の概要を説明します。Webサービスの初心者がチュートリアルを使用する前に読むことを想定しています。

Webサービスは、外部で使用可能な分散アプリケーション・コンポーネントです。これらを使用すると、異なる言語で記述されたコンピュータ・アプリケーションを統合し、異なるプラットフォームで実行できます。Webサービスは、ベンダーが共通のWebサービス標準に同意しているため、言語およびプラットフォームに依存しません。

Oracleは、Metroというjava.netプロジェクトを開発しています。Metroは完全なWebサービス・スタックで、単純な「Hello, World!」のデモから、信頼性の高い保護された取引に関するWebサービスに至るまでの開発者のすべてのニーズを扱っています。詳細は、link:https://metro.java.net/[+Metroのホーム・ページ+]を参照してください。

Metroには、WSIT (Web Services Interoperability Technologies)が含まれています。WSITは、セキュリティ保護、信頼性、メッセージ最適化などのエンタープライズ機能をサポートしています。WSITを使用すると、これらの機能を備えたMetroサービスをMicrosoft .NETサービスと相互運用できます。Metroの中では、Project TangoがWSITのコードベースを開発し発展させています。WSITの仕組みを確認するには、link:wsit.html[+高度なWebサービス相互運用性+]のチュートリアルを使用してください。

Webサービス開発者は、複数のプログラミング・モデルを使用できます。これらのモデルは、次の2つのカテゴリに分類され、どちらもIDEでサポートされています。

* *RESTベース。**RE*presentational *S*tate *T*ransferは、Webサービスの作成およびWebサービスとの通信のための新しい方法です。RESTでは、各リソースにURIがあり、HTTPヘッダーを操作することで制御されます。詳細は、<<rest,RESTful Webサービス>>を参照してください。
* *SOAP/WSDLベース。*従来のWebサービス・モデルでは、WebサービスのインタフェースはWSDLドキュメント(XMLの一種)を介して公開され、この中にURLが含まれています。その後のメッセージ交換はSOAPで行われますが、これも別のタイプのXMLドキュメントです。詳細は、<<jaxws,SOAPベースのWebサービス>>を参照してください。


== RESTful Webサービス

RESTベース(「RESTful」)のWebサービスは、URIで識別されるWebリソースのコレクションです。すべてのドキュメントおよび処理は、一意のURIを使用してWebリソースとしてモデル化されます。このWebリソースは、HTTPヘッダーで指定できるアクションで操作します。SOAP、WSDL、WS-*の標準は使用されません。かわりに、メッセージ交換は、XML、JSON、HTMLなどいずれの形式でも実行できます。多くの場合、Webブラウザをクライアントとして使用できます。

HTTPはRESTでのプロトコルです。使用できるメソッドは、GET、PUT、POSTおよびDELETEの4つのみです。リクエストをブックマークしたり、レスポンスをキャッシュしたりできます。ネットワーク管理者はHTTPヘッダーを見ることで、RESTfulサービスでの処理を簡単に追跡できます。

RESTは、HTTPインフラストラクチャで利用できるセキュリティ機能で十分なアプリケーションや、HTTPがプロトコルとして適しているアプリケーションを使用する場合に適切な技術です。RESTサービスは、洗練された機能を実現することもできます。Flickr、GoogleマップおよびAmazonは、すべてRESTful Webサービスを提供しています。NetBeans IDE Software as a Service (SaaS)機能では、Facebook、Zillow、およびサードパーティが提供した他のサービスを独自のアプリケーション内で使用できます。

link:https://jersey.java.net/[+Project Jersey+]は、RESTful Webサービス・ビルドのためのオープン・ソースの参考実装です。JerseyのAPIは、NetBeans IDEの「RESTful Webサービス」プラグインとして使用できます。

次のチュートリアルでは、RESTサービスの作成および使用を扱っています。

* link:../../docs/websvc/rest.html[+RESTful Webサービスについて+]
* link:../../docs/websvc/zillow.html[+SaaS: Zillow+]


==  SOAPベースのWebサービス

SOAPベースのWebサービスでは、Javaユーティリティによって、WebサービスのJavaコードに基づいてWSDLファイルが作成されます。WSDLはネット上に公開されます。Webサービスの使用に興味がある人がWSDLに基づいたJavaクライアントを作成します。メッセージはSOAP形式で交換されます。SOAPで渡すことができる操作の範囲は、RESTで使用できる操作よりもかなり幅広く、特にセキュリティ面で充実しています。

SOAPベースのWebサービスは、複雑な操作を使用する重量アプリケーション、および高いセキュリティ、信頼性または他のWS-*標準サポート機能が必要なアプリケーションに適しています。HTTP以外のトランスポート・プロトコルを使用する必要がある場合にも適しています。AmazonのWebサービスの多数、特に商取引が関係する部分や、銀行や政府機関が使用するWebサービスはSOAPベースです。

JAX-WS (Java API for XML Web Services)はMetroのSOAPベースWebサービスで現在使用されているモデルです。JAX-WSは以前のJAX-RPCモデルに基づいて構築されていますが、注釈などJava EE特有の機能を使用して、Webサービスの開発のタスクが簡略化されています。メッセージ配信用にSOAPを使用しているため、JAX-WSは特定のトランスポートに依存しません。また、WS-SecurityやWS-ReliableMessagingなどのWS-*仕様のモジュールを幅広くサポートしています。

Webサービス・クライアントを作成する場合、JAX-WSまたはJAX-RPCモデルのいずれを使用するかを選択できます。これは、一部の古いJAX-RPCサービスでは、JAX-WSでサポートされていないバインディング・スタイルを使用しているためです。これらのサービスはJAX-RPCクライアントによってのみ使用できます。

次のチュートリアルでは、JAX-WS SOAPベースのWebサービスの作成および使用を扱っています。

* link:./jax-ws.html[+JAX-WS Webサービスについて+]
* link:./client.html[+JAX-WS Webサービス・クライアントの開発+]
* link:./flower_overview.html[+バイナリ・データを渡すWebサービス+] - Swingコンポーネントを使用したクライアントで表示されるバイナリ・データを渡すWebサービスの使用に関する個別の学習
* link:./wsit.html[+高度なWebサービス相互運用性+] (WSITのデモ)
