1. はじめに
APIについて調べていると、よく出てくる言葉に SOAP API と REST API があります。
どちらもざっくり言うと、システム同士がデータをやり取りするための仕組み です。
ただ、調べてみると、SOAP / REST / XML / JSON / WSDL / HTTPメソッド
など、いきなり知らない単語がたくさん出てきて混乱しがちだと思います。
(私はREST APIには馴染みがあるのですが、SOAP APIはあまり聞いたことがありませんでした、、)
そこで、この記事では、初心者向けに以下の内容を整理します。
- ✅ SOAP API と REST API の基本的な違い
- ✅ SOAP API のXML構造(Envelope / Header / Body)の読み方
- ✅ WSDLとは何か、どんな情報が定義されているのか
- ✅ REST API で使われるHTTPメソッドとURL設計の考え方
- ✅ SOAP API と REST API のリクエスト・レスポンス例
- ✅ SOAP Fault と REST API のエラー表現の違い
- ✅ REST APIを設計するときに気をつけたいポイント
- ✅ 実務でSOAP API / REST APIに出会ったときの確認ポイント
少しでも参考になったら幸いです!
2. APIとは?
まずAPIとは、Application Programming Interface の略です。
簡単に言うと、 別のシステムやアプリケーションとやり取りするための窓口 です。
たとえば、あるアプリが別のシステムに対して、
- ユーザー情報を取得したい
- 注文情報を登録したい
- 決済結果を受け取りたい
- 在庫情報を確認したい
といった処理を行うときにAPIが使われます。
イメージとしては、システム同士が会話するための決められた入口と捉えていただければ。
3. SOAP APIとは
SOAP APIのSOAPは、Simple Object Access Protocol の略です。
SOAP APIは、簡単に言うと、決められたルールにかなり厳密に従って通信するAPI です。
SOAPでは、主に XML形式 でデータをやり取りします。
SOAPメッセージの基本構造
例としては以下の通りです。
<soapenv:Envelope>
<soapenv:Header>
<!-- 認証情報などを入れることがある -->
</soapenv:Header>
<soapenv:Body>
<GetUserRequest>
<UserId>123</UserId>
</GetUserRequest>
</soapenv:Body>
</soapenv:Envelope>
| タグ | 役割 |
|---|---|
| Envelope | SOAPメッセージ全体を包む一番外側の要素 |
| Header | 認証情報やトランザクション情報など、付加情報を入れる場所 |
| Body | 実際に実行したい処理の内容を入れる場所 |
| GetUserRequest | 呼び出したい処理を表す要素 |
| UserId | 処理に渡す具体的なパラメータ |
EnvelopeとBodyはSOAPメッセージの基本的な構造です。
Headerは必須ではありませんが、認証情報や追加の制御情報を入れるために使われることがあります。
一方で、GetUserRequestやUserIdはSOAP自体で決まっているタグではなく、
そのAPIの仕様として定義されるタグです。
つまり、SOAPメッセージには、
- SOAPとして決まっている共通の構造
- APIごとに定義される独自のリクエスト内容
の両方が含まれています。
また、SOAP APIではWSDLという定義ファイルが使われることがあります。
WSDLとは?
WSDLは Web Services Description Language の略で、
SOAP APIの「仕様書」のようなものです。
具体的に、WSDLには以下のような情報が定義されています。
| 項目 | 内容 |
|---|---|
| どんな操作ができるか | 例:ユーザー情報取得、注文登録など |
| リクエストの形式 | どんな項目を送る必要があるか |
| レスポンスの形式 | どんなデータが返ってくるか |
| 通信先のURL | どのエンドポイントに送ればよいか |
| 使用するプロトコル | SOAP over HTTP など |
- REST API:
- API仕様を人がドキュメントで確認したり、OpenAPIで管理したりすることが多い
- SOAP API:
- WSDLをもとにクライアントコードを自動生成することもある
つまりWSDLは、単なる説明書というより、
SOAP APIを呼び出すための契約書 兼 設計図 のような役割を持っているイメージです。
また、WSDLの中には、主に以下のような要素があります。
| 要素 | 役割の概要 |
|---|---|
| types | 使用するデータ型を定義する |
| message | リクエストやレスポンスのメッセージ構造を定義する |
| portType | APIで利用できる操作を定義する |
| binding | SOAPやHTTPなど、具体的な通信方式を定義する |
| service | 実際の接続先URLを定義する |
WSDLを見るときは「どんな操作ができるか」「何を送る必要があるか」「どこに送るのか」を確認すると読みやすいかなと思います。
4. REST APIとは
REST APIのRESTは、Representational State Transferの略です。
REST APIは、簡単に言うと、
Webの仕組みを活用して、シンプルにデータをやり取りするAPIのことです。
REST APIでは、HTTPの仕組みを利用します。
たとえば、以下のようなURLにアクセスしてデータを取得します。
GET /users/123
レスポンスは、現在では JSON形式 がよく使われます。
{
"id": 123,
"name": "Taro"
}
REST APIでは、HTTPメソッドを使って操作の意味を表します。
| HTTPメソッド | 主な意味 |
|---|---|
| GET | データを取得する |
| POST | データを登録する |
| PUT | データを更新する |
| PATCH | データを一部更新する |
| DELETE | データを削除する |
たとえば、ユーザー情報を取得するならGET、
新しいユーザーを登録するならPOSTを使う、といったイメージになります。
5. SOAP API と REST API の違い
SOAP API と REST API の違いをざっくり整理すると、以下のようになります。
| 観点 | SOAP API | REST API |
|---|---|---|
| 通信の考え方 | 厳密なルールに基づくプロトコル | Webの仕組みを活用した設計スタイル |
| データ形式 | 主にXML | 主にJSON |
| 定義情報 | WSDLで厳密に定義されることが多い | OpenAPIなどで定義されることが多い |
| 柔軟性 | ルールが厳格 | 比較的シンプルで柔軟 |
| 学習コスト | やや高め | 比較的低め |
| よく使われる場面 | 金融、決済、基幹システムなど | Webアプリ、スマホアプリ、SaaSなど |
| エラー表現 | SOAP Fault | HTTPステータスコード + JSONなど |
| メッセージ構造 | Envelope / Header / Body などの構造がある | APIごとの設計に依存する |
6. イメージで理解する
個人的には、SOAP APIとREST APIは以下のように捉えると理解しやすいと思います。
SOAP API
SOAP APIは、
きっちりした契約書を交わして、その通りにやり取りするイメージ です。
- メッセージの形式が決まっている
- XMLで厳密に記述する
- WSDLで仕様が定義されている
- セキュリティや信頼性が重視される場面で使われやすい
そのため、金融系や基幹システムなど、
厳密性が求められるシステムで見かけることがあるなという印象です。
REST API
REST APIは、
WebのURLに対して、必要な操作をシンプルに依頼するイメージ です。
- URLでリソースを表す
- GETやPOSTなどのHTTPメソッドを使う
- JSONでやり取りすることが多い
- Webアプリやスマホアプリと相性が良い
そのため、現在のWebサービスではREST APIを見かける機会が多いです。
7. 具体例で比較する
たとえば、ユーザーID123の情報を取得したい場合を考えます。
SOAP APIの場合
SOAP APIでは、XML形式のメッセージを送ります。
<soapenv:Envelope>
<soapenv:Body>
<GetUserRequest>
<UserId>123</UserId>
</GetUserRequest>
</soapenv:Body>
</soapenv:Envelope>
XMLの中に、「ユーザー情報を取得したい」「対象のユーザーIDは123」という情報を入れて送ります。レスポンスもXML形式で返ってきます。
<soapenv:Envelope>
<soapenv:Body>
<GetUserResponse>
<User>
<Id>123</Id>
<Name>Taro</Name>
<Email>taro@example.com</Email>
</User>
</GetUserResponse>
</soapenv:Body>
</soapenv:Envelope>
この例では、GetUserResponseの中にユーザー情報が入っています。
REST APIではJSONでシンプルに返ってくることが多いですが、SOAP APIではレスポンスもSOAPのXML構造に包まれて返ってきます。
そのため、SOAP APIでは「Bodyの中にある実際のレスポンスデータを取り出して処理する」という考え方になります。
また、SOAPではエラー情報が Fault として返されることがあります。
<soapenv:Envelope>
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Client</faultcode>
<faultstring>Invalid UserId</faultstring>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Faultは、SOAPにおけるエラーレスポンスのようなものです。
REST APIではHTTPステータスコードやJSONのエラーメッセージで表現することが多いですが、SOAP APIではXML内のFault要素でエラー内容を表すことがあります。
REST APIの場合
REST APIでは、URLとHTTPメソッドで表現できます。
GET /users/123
レスポンスは以下のようなJSONになることが多いです。
{
"id": 123,
"name": "Taro",
"email": "taro@example.com"
}
REST APIの方が、見た目としてはかなりシンプルに感じます。
一方で、指定したユーザーが存在しない場合などは、HTTPステータスコードとJSONでエラー内容を返すことがあります。
HTTP/1.1 404 Not Found
{
"error": {
"code": "USER_NOT_FOUND",
"message": "指定されたユーザーが見つかりません"
}
}
REST APIでは、SOAPのようにXML内のFault要素でエラーを表すのではなく、
HTTPステータスコードとレスポンスボディを組み合わせてエラー内容を表現することが多いです。
たとえば、よく使われるステータスコードには以下のようなものがあります。
| ステータスコード | 意味 |
|---|---|
| 400 Bad Request | リクエスト内容が不正 |
| 401 Unauthorized | 認証が必要、または認証に失敗 |
| 403 Forbidden | 権限がない |
| 404 Not Found | 対象のデータが見つからない |
| 500 Internal Server Error | サーバー側でエラーが発生した |
このように、REST APIでは
「HTTPステータスコードで大まかな結果を表し、JSONで詳細なエラー内容を返す」
という形がよく使われます。
8. SOAP API のメリット・デメリット
メリット
SOAP APIのメリットは、
仕様が厳密で、信頼性の高い通信に向いていること にあります。
具体的には、以下のような特徴があります。
- WSDLでAPI仕様を明確に定義できる
- メッセージ構造が厳密
- セキュリティやトランザクションなどの拡張仕様がある
- 大規模な業務システムや基幹系システムで使われることがある
デメリット
一方で、SOAP APIには以下のようなデメリットもあります。
- XMLの記述量が多くなりやすい
- REST APIに比べると学習コストが高い
- 実装やデバッグがやや複雑になりやすい
- Webアプリ開発では少し重く感じることがある
初心者目線だと、XMLやWSDLの概念が出てくるため、最初は少しとっつきにくい印象があります。
9. REST API のメリット・デメリット
メリット
REST APIのメリットは、
シンプルで扱いやすいこと にあります。
具体的には、以下のような特徴があります。
- URLとHTTPメソッドで直感的に理解しやすい
- JSON形式でデータを扱うことが多く、読みやすい
- Webアプリやスマホアプリと相性が良い
- ブラウザやcurl、Postmanなどで確認しやすい
たとえば、以下のようにcurlで簡単に確認できます。
curl -X GET https://example.com/users/123
デメリット
一方で、REST APIにもデメリットがあります。
- 設計ルールがゆるいため、API設計に差が出やすい
- 厳密な仕様管理をしないと、使い方が分かりにくくなる
- 複雑な業務処理では設計が難しくなることがある
- セキュリティやエラー設計は別途しっかり考える必要がある
REST APIはシンプルだからこそ、きちんと設計しないと後から使いづらくなることがあります。
例えば、REST APIはURLやHTTPメソッドの使い方が比較的自由なため、
設計方針がバラバラになると使いづらくなります。
例1:URLの命名がバラバラになる
同じ「ユーザー情報を取得するAPI」でも、以下のようにURLの付け方がバラバラだと分かりにくくなります。
GET /getUser?id=123
GET /user/detail/123
GET /users/123
どれでも実装はできますが、APIごとに命名ルールが違うと、
利用する側は「このAPIはどんなURL規則なんだろう?」と毎回確認する必要があります。
例2:HTTPメソッドの使い方が不自然になる
データを削除する処理なのにGETを使ってしまうと、直感的に分かりにくくなります。
GET /deleteUser?id=123
REST APIでは、基本的に削除はDELETEを使う方が自然です。
DELETE /users/123
HTTPメソッドの使い方がバラバラだと、
利用する側は「このAPIは取得なのか、更新なのか、削除なのか」を判断しづらくなってしまいます。
例3:レスポンス形式が統一されていない
あるAPIでは以下のように返るのに、
{
"id": 123,
"name": "Taro"
}
別のAPIでは以下のように返るとします。
{
"user_id": 123,
"user_name": "Taro"
}
どちらも意味は分かりますが、項目名のルールが統一されていないと、
フロントエンドや他システム側で扱うときに変換処理が増えたり、実装ミスが起きやすくなってしまいます。
例4:エラー形式が統一されていない
エラー時のレスポンスも、APIごとに形式が違うと扱いづらくなってしまいます。
{
"message": "User not found"
}
{
"error": {
"code": "USER_NOT_FOUND",
"detail": "指定されたユーザーが存在しません"
}
}
エラー形式が統一されていないと、画面側でエラーメッセージを出し分けたり、ログを分析したりするときに困ることがあります。
このように、REST APIはシンプルで自由度が高い一方で、
URL設計、HTTPメソッド、レスポンス形式、エラー形式などをきちんと揃えないと、
後から利用する側・保守する側にとって分かりづらいAPIになってしまいます。
10. どっちを使えばいいの?
現在、新しくWebアプリやスマホアプリ向けのAPIを作る場合は、
REST APIが採用されることが多い です。
理由としては、
- JSONで扱いやすい
- フロントエンドと連携しやすい
- HTTPの仕組みをそのまま使える
- 学習コストが比較的低い
- ツールや情報が多い
といった点があります。
一方で、SOAP APIは現在でも使われています。
特に、
- 金融系
- 決済系
- 既存の基幹システム
- 厳密な仕様管理が必要なシステム
- 過去から運用されている業務システム
などでは、SOAP APIを見かけることがあります。
つまり、
REST APIの方が新しいからSOAP APIは不要というわけではないです。
それぞれ得意な場面が違う、という理解が大事だと思っています。
11. 実務でSOAP API / REST APIに出会ったときの確認ポイント
SOAP APIとREST APIでは、確認するポイントが少し違うと思っています。
ここでは、APIを「作る側」ではなく、まずは「利用する側・調査する側」の目線で確認ポイントを整理します。
SOAP APIの場合
SOAP APIでは、まず以下を確認すると理解しやすいと思います。
- WSDLはあるか
- どんな操作が定義されているか
- リクエストXMLの構造はどうなっているか
- レスポンスXMLの構造はどうなっているか
- 認証情報はHeaderに必要か
- エラー時はFaultが返るのか
REST APIの場合
REST APIでは、まず以下を確認すると理解しやすいと思います。
- エンドポイントのURL
- HTTPメソッド
- リクエストパラメータ
- リクエストボディ
- レスポンスJSON
- HTTPステータスコード
- エラー時のレスポンス形式
同じAPIでも、SOAPとRESTでは確認するポイントが若干違います。
SOAP APIではWSDLやXML構造、REST APIではURL・HTTPメソッド・JSON・ステータスコードを見ることが多いです。
12. まとめ
今回は、SOAP API と REST API の違いについて整理しました。
ポイントは以下です。
- APIは、システム同士がやり取りするための窓口
- SOAP APIは、XMLを使って厳密なルールで通信する
- REST APIは、HTTPの仕組みを使ってシンプルに通信する
- SOAP APIは、金融系や基幹系など厳密性が求められる場面で使われることがある
- REST APIは、Webアプリやスマホアプリなどでよく使われる
- どちらが絶対に良いというより、用途やシステムの特性によって使い分ける
APIについて学ぶときは、REST APIに触れる機会が多いと思いますが、
実務では既存システム連携などでSOAP APIに出会うこともあります。
そのときに、
「SOAPはXMLで厳密にやり取りするタイプのAPIなんだな」
と理解できているだけでも、かなりキャッチアップしやすくなると思います。
この記事が少しでも参考になったら、いいねやストックしてもらえるととってもうれしいです!





