コールアウトエンドポイントとしての指定ログイン情報
エンドポイント URL と認証をコールアウト定義から切り離すことで、指定ログイン情報でコールアウトを簡単に管理できます。たとえば、エンドポイント URL が変更された場合も、指定ログイン情報を更新するだけです。その指定ログイン情報を参照するすべてのコールアウトは、引き続き機能します。
複数の組織がある場合、各組織に同じ名前でエンドポイント URL が異なる指定ログイン情報を作成できます。これにより、それらの指定ログイン情報の共有名を参照するコールアウト定義を 1 つだけパッケージして (すべての組織で) リリースできます。たとえば、各組織の指定ログイン情報に異なるエンドポイント URL を指定して、開発環境と本番環境の違いに対応することができます。Apex コールアウトでそれらの指定ログイン情報の共有名が指定されている場合、コールアウトを定義する Apex クラスをパッケージ化して、プログラムで環境をチェックすることなく、すべての組織にリリースできます。
コールアウト定義から指定ログイン情報を参照するには、指定ログイン情報 URL を使用します。指定ログイン情報 URL にはスキームcallout:、指定ログイン情報の名前、必要に応じて追加されたパスが含まれます。例: callout:My_Named_Credential/some_path。
クエリ文字列を指定ログイン情報 URL に追加できます。指定ログイン情報 URL とクエリ文字列の間の区切り文字として疑問符 (?) を使用します。たとえば、callout:My_Named_Credential/some_path?format=json です。
例
1HttpRequest req = new HttpRequest();
2req.setEndpoint('callout:My_Named_Credential/some_path');
3req.setMethod('GET');
4Http http = new Http();
5HTTPResponse res = http.send(req);
6System.debug(res.getBody());
パスワード認証ではなく OAuth を使用する場合、Apex コードに変更はありません。指定ログイン情報の認証設定は異なります。これは組織で定義されている認証プロバイダを参照するためです。
次に、指定ログイン情報を使用しない Apex コードがどうなるかを見てみましょう。基本的なパスワード認証を使用していても、コードの認証処理はより複雑になっています。OAuth のコーディングはさらに複雑になるため、指定ログイン情報には最適な使用事例です。
1HttpRequest req = new HttpRequest();
2req.setEndpoint('https://my_endpoint.example.com/some_path');
3req.setMethod('GET');
4
5// Because we didn't set the endpoint as a named credential,
6// our code has to specify:
7// - The required username and password to access the endpoint
8// - The header and header information
9
10String username = 'myname';
11String password = 'mypwd';
12
13Blob headerValue = Blob.valueOf(username + ':' + password);
14String authorizationHeader = 'BASIC ' +
15EncodingUtil.base64Encode(headerValue);
16req.setHeader('Authorization', authorizationHeader);
17
18// Create a new http object to send the request object
19// A response object is generated as a result of the request
20
21Http http = new Http();
22HTTPResponse res = http.send(req);
23System.debug(res.getBody());