0

私がアクセスしている API には、クライアントのインスタンス化時に渡される publicKey と API エンドポイントの完全な URI の組み合わせであるカスタム認証ヘッダーが必要です。baseUrl と操作 uri をサービスの説明から取り出して、それらを使用して認証ヘッダーを作成したいのですが、インスタンス化されたクライアントを呼び出すときにこれを行う方法がわかりません。

これはサービスの説明です:

{
"name": "FranchiseSystem",
"apiVersion": "1",
"baseUrl": "https://apidev.example.com",
"description": "REST API client",
"operations": {
    "GetFranchiseList": {
        "httpMethod": "GET",
        "uri": "v1/franchise",
        "summary": "Returns an array of franchises."
    },
    "GetReviews": {
        "httpMethod": "GET",
        "uri": "v1/review",
        "summary": "Returns an array of reviews."
    }
}
}

クライアントのセットアップは次のとおりです。

$testClient = new JunknetClient([
  'publicKey' => '1234567890',
]);

これは、操作の名前を持つインスタンス化されたクライアントへの呼び出しです。

$result = $testClient->GetFranchiseList();

また:

$result = $testClient->GetReviews();   

testClient->GetFranchiseList が呼び出されたら、publicKey と GetFranchiseList の baseUrl と uri の値を使用して認証ヘッダーを作成する必要があります。

testClient->GetReviews が呼び出されたら、publicKey と GetReviews の baseUrl と uri の値を使用して認証ヘッダーを作成する必要があります。

4

2 に答える 2

0

イベントエミッターとサブスクライバーを使用して問題を解決できました。少し面倒ですが、これで仕事は終わりです。

private function handleCredentialsOptions(Collection $config) {
  //Build authorization header from $config values
$this->getHttpClient()->getEmitter()->on('before',
  function (BeforeEvent $e) use(&$config) {
    $this->getHttpClient()->setDefaultOption('headers', [
      'Authentication' => '',
    ]);
    $path = $e->getRequest()->getUrl();
    $authValue = $config['publicKey'].';;';
    $authValue .= time().';';
    $authValue .= strtoupper(md5($config['privateKey'] . $path));
    $this->getHttpClient()->setDefaultOption('headers', [
      'Authentication' => $authValue,
    ]);
  });
}
于 2015-04-10T15:48:04.677 に答える