前提・実現したいこと
現在、Microsoft Translator APIを使用したiOS翻訳アプリを作っています。
使用言語はSwiftです。
https://docs.microsoft.com/ja-jp/azure/cognitive-services/translator/reference/v3-0-reference
こちらのレファレンスなどを参考にしていますが、
翻訳する際に必要になるアクセルトークンが取得できません。
一応、リファレンス通りに呼び出しているつもりなので、何が原因でトークンが取れないのかが分かりません。
そこで、
・書き方で間違っているところがある
・そもそも違う値をパラメータにしている
等
何かアドバイスをしていただけたら嬉しいです。
発生している問題・エラーメッセージ
下記ソースコードのように、 Alamofireを使って、 https://api.cognitive.microsoft.com/sts/v1.0/issueToken に、 [Ocp-Apim-Subscription-Key:"リソース管理画面のキー1"] をパラメータに追加してAPIを叩いていますが、 返却されるJSONでは、 リクエストする時にスクリプションキーを含めているか確認しなさいと言われています。 { "error":{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }}
該当のソースコード
swift
import Foundation import Alamofire struct APIBase { let host: String let url: String let method: HTTPMethod let parameters: Parameters init(path: String, method: HTTPMethod = .get, parameters: Parameters = [:]) { self.host = App.API.domain + App.API.directory self.url = self.host + path self.method = method self.parameters = parameters } func request(success: @escaping(_ data: Data) -> (), failed: @escaping(_ error: String) -> ()) { Alamofire.request(url, method: method, parameters: parameters).response { (response) in guard let data = response.data else { return failed("データを取得できませんでした") } success(data) } } } // 認証トークン取得クラス class GetTokenAPI { class func request(key: String, onSuccess: @escaping(TokenEntity) -> (), onError: @escaping(String) -> ()) { let p: [String : Any] = ["Ocp-Apim-Subscription-Key": key] let api = APIBase(path: App.API.accessToken, method: .post, parameters: p) api.request(success: { (data) in do { let entity: TokenEntity = try JSONDecoder().decode(TokenEntity.self, from: data) if entity.statusCode != 200 { onError(entity.message ?? "") return } onSuccess(entity) } catch { onError("データの取得に失敗しました") } }) { (errorMessage) in onError(errorMessage) } } // このクラスでAPIを叩く class TopViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() GetTokenAPI.request(key: "Cognitive Services リソース管理の キー1", onSuccess: { (tokenEntity) in }) { (error) in } } }
試したこと
自分のコードの書き方が悪いのかなと思い、一度、postmanで
https://api.cognitive.microsoft.com/sts/v1.0/issueToken
?Ocp-Apim-Subscription-Key=サブスクリプションキー
を叩きましたが、下記のようにResource not foundが返ってきます。
{
"error": {
"statusCode": 404,
"message": "Resource not found"
}
}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/24 23:57
2019/05/26 06:58 編集
2019/05/28 02:28