プラットフォーム技術 - API呼び出しプロトコル
オープン プラットフォーム (TOP) の API は HTTP プロトコルに基づいて呼び出され、開発者 (ISV) は TOP が提供する公式 SDK (リクエストのカプセル化、署名の暗号化、レスポンスの説明などの多言語をサポート) を直接使用できます。 、パフォーマンスの最適化など) を呼び出して呼び出すことも、TOP プロトコルに従って呼び出しの HTTP リクエストをカプセル化することもできます。以下では、API 呼び出しの HTTP リクエストを自己カプセル化する原理について詳しく説明します。
呼び出しプロセス
TOP プロトコルによると: パラメータの入力> 署名の生成> HTTP リクエストの組み立て> HTTP リクエストの開始> HTTP レスポンスの取得> json/xml 結果の解釈、以下は一般的な図式です。呼び出しプロセスの図:
呼び出しエントリ ポイント
API を呼び出すためのサービス URL アドレスオープン プラットフォームは現在、ISV が使用できる 4 つの環境を提供しています。サンドボックステスト環境、フォーマルテスト環境、フォーマル環境、海外環境。
- サンドボックス テスト環境: ISV ソフトウェアのテスト環境。アプリケーションの作成後に使用できます。この環境は、淘宝網の簡素化されたバージョンを提供し、ほとんどのシナリオで API 呼び出しをサポートします。サンドボックス環境のアクセス許可とトラフィックは無制限で、自由に使用できます。
- 正式なテスト環境: ISV ソフトウェアを起動する前の正式なシミュレーション環境であり、アプリケーションが正常に作成された後に使用できます。この環境は主に、サンドボックスでテストを完了できない一部のシナリオで使用されます。API 呼び出しは 1 日あたり 5,000 回に制限され、許可されたユーザーの数は 5 で、呼び出すことができる API は権限と機能に一致します。アプリケーションの。
- 正式環境: ISV ソフトウェアがオンラインになった後に使用される環境。この環境への入り口は正式なテスト環境と同じですが、アプリケーションがオンラインになった後はトラフィック制限がかかります。特定のトラフィック制限はアプリケーションに関連しています。アプリケーションが属するカテゴリによって異なります。たとえば、サービス マーケット アプリケーションの場合、API 呼び出しは 1 日あたり 100 万回に制限されます。
- 海外環境: 海外環境も正式環境の一種で、主に海外(欧米諸国)の ISV で利用されています。海外 ISV の場合、海外環境の利用実績となります。国内環境よりも2倍も高くなります。
サービス アドレス (HTTP) | サービス アドレス (HTTPS) | ||
---|---|---|---|
http://gw.api.tbsandbox.com/router/rest | https:// gw .api.tbsandbox.com/router/rest | ||
http://gw.api.taabao.com/router/rest | https://eco.taobao.com/router/rest | ||
http://api.taabao.com/router/rest | https://api.taabao.com/router/rest |
パラメータ名 | パラメータの種類 | #必須ですか? | #パラメータの説明|
---|---|---|---|
は | API インターフェイス名です。 | app_key | |
は、 | によってアプリケーションに割り当てられた AppKey です。 | ここで注意すべきは、正式環境とサンドボックス環境の AppKey は異なります (AppSecret も含む) ので、使用する場合は区別に注意する必要があり、オープン プラットフォーム コンソールの「アプリケーション管理 - 概要」に入り、 「アプリケーション管理-サンドボックス環境管理」で正式環境とサンドボックス環境のAppKeyとAppSecretをそれぞれ確認します |
| session
No | ユーザーログイン認証 成功後、TOP はアプリケーションに対して認証情報を発行します。この API ドキュメントのラベルが次のように示している場合: 「認可が必要」の場合はこのパラメータを渡す必要があり、「認可が不要」の場合はこのパラメータを渡す必要はありません。「オプションの認可」の場合はこのパラメータはオプションです。 | timestamp | |
は、yyyy-MM-dd HH:mm:ss 形式の | タイムスタンプです。タイムゾーンは GMT 8 です (例: 2016-01-01 12:00:00)。 Taobao API サーバーでは、クライアント リクエストの最大 10 分の時間エラーが許容されます。 | #format | |
No | 応答形式。デフォルトは xml 形式で、オプションの値は xml、json です。 | v | |
は | API プロトコルのバージョン、オプションの値: 2.0。 | partner_id | |
No | パートナー ID。 | target_app_key | |
No | 呼び出されるターゲット AppKey (呼び出される API がサードパーティによって提供される場合のみ) ISV は有効です。 | simplify | |
No | 簡素化された JSON 戻り形式を使用するかどうか、format=json の場合のみ有効、デフォルト値は: false。 | sign_method | |
は、 | 署名のダイジェスト アルゴリズムです。オプションの値は、hmac、md5 です。 | sign | |
は | API 入力パラメータの署名結果です。署名アルゴリズムについては、以下の概要を参照してください。 。 | ビジネス パラメータAPI 呼び出しに含める必要があるパブリック パラメータに加えて、API 自体にビジネス レベルのパラメータがある場合は、それらも渡す必要があります。ビジネスの API ドキュメントを参照してください。各 API の -level パラメータ。 署名アルゴリズムAPI 呼び出しプロセス中のハッカーによる悪意のある改ざんを防ぐために、すべての API 呼び出しには署名が必要です。TOP サーバーはリクエスト パラメーターに基づいて署名を検証します。署名は不正です。要求は拒否されます。 TOP は現在 2 つの署名アルゴリズムをサポートしています: MD5 (sign_method=md5)、HMAC_MD5 (sign_method=hmac) 一般的な署名プロセスは次のとおりです:
JAVA 署名サンプル コード ##public static String SignTopRequest(Map<String, String> params, String Secret, String SignMethod) throws IOException { // ステップ 1: パラメーターがソートされているかどうかを確認する String[] key = params.keySet().toArray(new String[0]); Arrays.sort(keys); // ステップ 2: すべてのパラメータ名とパラメータ値を一緒に文字列化する StringBuilder query = new StringBuilder(); if (Constants.SIGN_METHOD_MD5.equals(signMethod)) { query.append(secret); } for (String key:keys) { 使用して使用して使用します - spule out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out out outを使用して使用を使用して使用します ## ## // ステップ 3: MD5/HMAC 暗号化を使用する byte[] bytes; if (Constants.SIGN_METHOD_HMAC.equals(signMethod)) { bytes = encryptHMAC (query.toString(), Secret) ; } else { query.append(secret); bytes = encryptMD5(query.toString()); } // ステップ 4: バイナリを大文字に変換する16 進数 return byte2hex(bytes); } public static byte[] encryptHMAC(String data, String Secret) throws IOException { byte[] bytes = null; try { SecretKey SecretKey = new SecretKeySpec(secret.getBytes(Constants.CHARSET_UTF8), "HmacMD5"); Mac mac = Mac.getInstance(secretKey .getAlgorithm()); mac.init(secretKey) ; バイト = mac.doFinal(data.getBytes(Constants.CHARSET_UTF8)); } catch (GeneralSecurityException gse) { throw new IOException(gse.toString()); } return bytes; } public static byte[] encryptMD5(String data ) throws IOException { return encryptMD5(data.getBytes(Constants.CHARSET_UTF8)); } public static String byte2hex(byte[] bytes) { StringBuilder sign = new StringBuilder( ); for (int i = 0; i < bytes.length; i ) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() == 1) { sign.append("0"); } sign.append(hex.toUpperCase()); } return sign.toString(); }
他の言語の署名サンプル コードについては、TOP 公式 SDK ソース コードを参照してください。 taabao.item.seller.get 呼び出しを例として、具体的な手順は次のとおりです: 1. パラメータ値を設定します パブリックパラメータ: ビジネスパラメータ: 2. ASCII 順に並べ替えます 3. Splice パラメータ名とパラメータ値 4. 署名の生成 アプリのシークレットが helloworld であると仮定すると、署名の結果は次のようになります: hex( md5(helloworld) 適切なパラメータ名とパラメータ値の順序で結合されます helloworld)) = “66987CB115214E59E6EC978214934FB8” 5. HTTP リクエストを組み立てますUse utf-8 toすべてのパラメータ名とパラメータ値を URL エンコードし (パラメータの順序はオプションですが、署名パラメータを含める必要があります)、次のように GET または POST (byte[] タイプのパラメータを含む) を通じてリクエストを開始します。 インターフェイス呼び出しで署名エラー「無効な署名」が報告される |