CloudScript から Web フック呼び出しを実行する

CloudScript のあまり知られていない機能の 1 つは、通常の Representational State Transfer (REST) 呼び出しを使用して、任意の Web API エンドポイントに対して CloudScript から Web フック呼び出しを実行できることです。

注意

可能な場合は、新しい CloudScript Functions を使用して Webhook 呼び出しを実行することをお勧めします。

これにより、タイトルが基本的な情報サービスに対して呼び出しを実行できるだけでなく、より複雑なシナリオ (OAuthの使用など) を実現することで、所有するエンドポイントへの通信を保護できます。

このチュートリアルでは、安全でない シナリオと 安全な シナリオの両方で、CloudScript から Web フック呼び出しを実行する方法を説明します。

REST 呼び出しであるため、CloudScript からの Webhook 呼び出しの構造はシンプルです。 指定する要素は以下のとおりです。

  • URL エンドポイント。
  • REST メソッド (POST、GET、PUT、DELETE)。
  • 必要なヘッダー。
  • コンテンツ タイプ (最も一般的なタイプは application/JSON)。
  • コンテンツ自体 (本文)。

たとえば、サーバー側ロジックのバージョン番号を取得するための基本的な Web API 呼び出しは、以下の例のようになります。

// CloudScript
var url = "http://api.yoursite.com/playfab_call/GetVersion";
var method = "post";
var contentBody = "";
var contentType = "application/json";
var headers = {};
var responseString =  http.request(url,method,contentBody,contentType,headers);

応答の本文は文字列化された形式で返されるため、その後残りのスクリプトで使用できます。

今回はバージョンをクエリしているため、ここに示すように応答を log に記述できます。

// CloudScript
log.info(responseString);

CloudScript の実行の最後にクライアントに返される応答は、以下の例のようになります。

//HTTP Response
{
    "code": 200,
    "status": "OK",
    "data":
    {
        "FunctionName": "MyScript",
        "Revision": 23,
        "FunctionResult": true,
        "Logs": [
        {
            "Level": "Info",
            "Message": "{\"version\": 3}"
        }],
        "ExecutionTimeSeconds": 0.4309841,
        "MemoryConsumedBytes": 29608,
        "APIRequestsIssued": 0,
        "HttpRequestsIssued": 1
    }
}

ただし、通信する必要がある 安全な サービスがある場合、最初にそのサービスと資格情報を交換して ID を確立する必要があります。

OAuth ソリューションの場合は、クライアントの ID とシークレットを使用して Bearer アクセス トークンをリクエストする必要があります。 これは特定の OAuth の実装に応じて異なりますが、呼び出しは以下の例のようになります。

//CloudScript
var url = "https://api.yoursite.com/playfab_call/request_token";
var method = "post";
var contentBody = "grant_type=client_credentials";
var contentType = "application/x-www-form-urlencoded";
var headers = {};
headers["client_id"] = clientId;
headers["client_secret"] = clientSecret;

var tokenResponse =  http.request(url,method,contentBody,contentType,headers);

応答が適切な場合、次に、以下に示すように応答から bearer_access_token を解析できます (ここでも特定の OAuth 実装に依存しますが、これはこの認証形式の非常に一般的なパターンです)。

//CloudScript
var parsedData = JSON.parse(tokenResponse);
var bearer_access_token = parsedData["access_token"];

これにより、bearer_access_token を提供することで、OAuth で保護された機能に呼び出しを実行できます。

//CloudScript
var url = "https://api.yoursite.com/playfab_call/do_action";
var method = "post";
var contentBody = customActionBody;
var contentType = "application/json";
var headers = {};
headers["authorization"] = "Bearer " + bearer_access_token;

つまり、この場合の基本的なパターンは、アプリケーションのクライアント ID とシークレットを使用して呼び出しの一意の Bearer アクセス トークンを取得し、そのトークンを使用して呼び出しを保護することです。

ご覧のように、これらの呼び出しは中間者攻撃を保護するために SSL を使用して実行されます。

CloudScript からの HTTP 呼び出しを使用して、タイトルに必要な任意の Web API に対して呼び出しを実行できます。 これにより、タイトルの機能を PlayFab が直接提供する機能よりも拡張でき、独自のカスタム サービスを作成および使用したり、他のサービスにアクセスしたりできます。

これはすべて CloudScript 内で起こるため、これらの呼び出しを実行するための、サーバーが権威を持つコンテキストが提供されます。 これは、CloudScript 内で必要な保護が適用され、プレイヤーがチートをしたり、不適切な機能やデータにアクセスすることを防止できることを意味します。