HTTP のクラス
これらのクラスは HTTP 要求および応答の機能を表示します。
- Http クラス: HTTP 要求と応答を開始するにはこのクラスを使用します。
- HttpRequest クラス: プログラムに基づいて GET、POST、PATCH、PUT、および DELETE のような HTTP 要求を作成するには、このクラスを使用します。
- HttpResponse クラス: HTTP で返された HTTP の応答を処理するには、このクラスを使用します。
HttpRequest クラスと HttpResponse クラスは、次の要素をサポートします。
- HttpRequest
- GET、POST、PATCH、PUT、DELETE、TRACE、CONNECT、HEAD、および OPTIONS などの HTTP 要求型
- 要求ヘッダー (必要な場合)
- 読み取りおよび接続タイムアウト
- リダイレクト (必要な場合)
- メッセージ本文の内容
-
HttpResponse
- HTTP 状況コード
- 応答ヘッダー (必要な場合)
- レスポンスボディの内容
次の例では、url パラメーターで getCalloutResponseContents メソッドに渡される外部サーバーへの HTTP GET 要求を行います。この例では、返されたレスポンスボディにもアクセスします。
1public class HttpCalloutSample {
2
3 // Pass in the endpoint to be used using the string url
4 public String getCalloutResponseContents(String url) {
5
6 // Instantiate a new Http object
7 Http h = new Http();
8
9 // Instantiate a new HTTP request, specify the method (GET) as well as the endpoint
10 HttpRequest req = new HttpRequest();
11 req.setEndpoint(url);
12 req.setMethod('GET');
13
14 // Send the request, and return a response
15 HttpResponse res = h.send(req);
16 return res.getBody();
17 }
18}前の例は、同期して実行されます。つまり、外部 Web サービスが応答を返すまで、それ以上の処理は発生しません。または、@future アノテーションを使用してコールアウトを非同期に実行することもできます。
次の例では、url パラメーターで getPostCalloutResponseContents メソッドに渡される外部サーバーへの HTTP POST 要求を行います。Your_JSON_Content は、コールアウトで送信する JSON コンテンツに置き換えます。
1public class HttpPostCalloutSample {
2
3 // Pass in the endpoint to be used using the string url
4 public String getPostCalloutResponseContents(String url) {
5
6 // Instantiate a new Http object
7 Http h = new Http();
8
9 // Instantiate a new HTTP request
10 // Specify request properties such as the endpoint, the POST method, etc.
11 HttpRequest req = new HttpRequest();
12 req.setEndpoint(url);
13 req.setMethod('POST');
14 req.setHeader('Content-Type', 'application/json');
15 req.setBody('{Your_JSON_Content}');
16
17 // Send the request, and return a response
18 HttpResponse res = h.send(req);
19 return res.getBody();
20 }
21}エンドポイントまたはリダイレクトエンドポイントから外部サーバーにアクセスするには、認証されたリモートサイトのリストにリモートサイトを追加しておきます。Salesforce にログインし、[設定] から、[クイック検索] ボックスに「リモートサイトの設定」と入力し、[リモートサイトの設定] を選択します。
HttpRequest で作成されたリクエストボディ内、または HttpResponse でアクセスされたレスポンスボディ内の XML または JSON コンテンツを解析するには、XML クラスまたは JSON クラスを使用します。
考慮事項
- AJAX プロキシは、リダイレクトと認証チャレンジ (401/407 応答) を自動的に処理します。AJAX プロキシの詳細は、AJAX Toolkit のマニュアルを参照してください。
- エンドポイントを指定ログイン情報 URL として設定できます。指定ログイン情報 URL にはスキーム callout:、指定ログイン情報の名前、必要に応じて追加されたパスが含まれます。例: callout:My_Named_Credential/some_path。指定ログイン情報では、1 つの定義にコールアウトエンドポイントの URL と必要な認証パラメーターを指定します。Apex ��ールアウトで指定ログイン情報をコールアウトエンドポイントとして指定するすべての認証が Salesforce によって管理されるため、コードでこれらを行う必要はありません。指定ログイン情報で定義されたサイトについては、外部サイトへのコールアウトに必要なリモートサイト設定もスキップできます。「コールアウトエンドポイントとしての指定ログイン情報」を参照してください。
- コールアウトでリクエストボディを設定するときは、メソッドを POST に設定します。リクエストボディを設定して要求メソッドが GET である場合、POST 要求が実行されます。
- DML 操作、キュー可能ジョブ (System.enqueueJob でキューに格納されたジョブ)、Database.executeBatch、または future メソッドからコミットされていない保留中のトランザクションがある場合、コールアウトはブロックされます。