日常業務において、A社がB社のAPIメソッドに接続したいという場面がよくありますが、この記事ではA社の視点で実際にB社のAPIインターフェースに接続していきます。
1. 背景
日常業務でよく遭遇するシナリオは次のとおりです: 会社 A は会社 B の API メソッドに接続したいと考えています。このとき、会社 A は会社 B のインターフェイス ドキュメントを読み取り、インターフェイス ドキュメントから接続する必要がある API を見つける必要があります。インターフェース文書の要件に従ってコーディング作業を完了し、最後にドッキング作業を完了します。
この記事はA社の視点で、B社のAPIインターフェースを接続する実戦です。
2. B 社のインターフェースの基本的な規則を理解する
通常の状況では、B 社は基本的なドッキングを満たすために次のような同様の契約を締結し、テスト環境と正式環境に対して 2 つの情報セットを提供します。
appkey: A社のマーチャントプラットフォーム登録ID
appsecret: A 社のマーチャント プラットフォームによって取得されたシークレット
3. 基本ドメイン名
通常の状況では、B 社は、テスト環境と運用環境という 2 つの基本的なドメイン名を提供します。
例えば:
テスト環境:https://******.com.cn
本番環境:https://******.com.cn
4. リクエストと対応するフォーマットの説明
通常の状況では、B 社はリクエストとそれに対応する基本フォーマットの指示を提供します。
例えば:
1. リクエスト方法
役職
2. リクエストメッセージのフォーマット
アプリケーション/json
3. 応答メッセージのフォーマット
アプリケーション/json
4. パブリックパラメータをリクエストする
たとえば、B 社には次のような要件があります。
すべてのインターフェイスは、HTTP ヘッダー モードで次のパラメータを渡す必要があります。
名前 | タイプ | しなければならない | 説明する |
---|---|---|---|
鍵 | 弦 | はい | 呼び出しキー (GET モードで URL に結合する必要があります) |
秘密 | 弦 | はい | 通話キー |
api_name | 弦 | はい | APIインターフェース名(リクエストアドレスに含まれる) [item_search、item_get、item_search_shopなど] |
キャッシュ | 弦 | いいえ | [はい、いいえ] デフォルトは [はい] で、キャッシュされたデータが呼び出され、より高速になります。 |
結果の種類 | 弦 | いいえ | [json,jsonu,xml,serialize,var_export] はデータ形式を返します。デフォルトは json です。jsonu によって出力されたコンテンツは中国語で直接読み取ることができます。 |
ラング | 弦 | いいえ | [cn,en,ru] 翻訳言語、デフォルトは cn 簡体字中国語 |
バージョン | 弦 | いいえ | APIバージョン |
もちろん、さまざまな企業が提供するパラメータは異なり、企業ごとに異なります。
5. レスポンス/コールバックパラメータの説明
例:B社のすべてのAPIにはレスポンスがあり、一部のAPIにはコールバックレスポンスもありますが、レスポンスであってもコールバックレスポンスであってもパラメータの形式は同じです。
名前 | タイプ | しなければならない | 値の例 | 説明する |
---|---|---|---|---|
アイテム |
アイテム[] | 1 | 赤ちゃんの詳細データ | |
num_id |
Bigint | 1 | 520813250866 | 赤ちゃんID |
タイトル |
弦 | 1 | セキュリティチェック合格の木製三枚刃折りたたみナイフ、クリエイティブミニキーホルダー、キーナイフ、サーベル、携帯用多機能ナイフ、送料無料 | 赤ちゃんのタイトル |
desc_short |
弦 | 0 | 製品説明 | |
プロモーション価格 |
内部 | 0 | 特別価格 | |
価格 |
浮く | 1 | 25.8 | 価格 |
合計金額 |
浮く | 0 | 0 | |
示唆的な価格 |
浮く | 0 | 0 | |
オリジナル価格 |
弦 | 0 | 25.80 | 元値 |
ニック |
弦 | 0 | ハッピー ショッピング イン | 店主のあだ名 |
番号 |
内部 | 0 | 3836 | 在庫あり |
私の番号 |
内部 | 0 | 0 | 最低購入数量 |
詳細URL |
弦 | 0 | http://item.taobao.com/item.htm?id=520813250866 | ベイビーリンク |
pic_url |
弦 | 1 | //gd2.alicdn.com/imgextra/i4/2596264565/TB2p30elFXXXXXQXpXXXXXXXXXX_!!2596264565.jpg | 赤ちゃんの写真 |
ブランド |
弦 | 0 | 三刃木 | ブランド名 |
ブランドID |
内部 | 0 | 8879363 | ブランドID |
rootCatId |
内部 | 0 | 50013886 | 最上位のカテゴリ ID |
シド |
内部 | 1 | 50014822 | |
パン粉 |
ミックス | 0 | [] | ナビゲーションメニュー |
作成時間 |
弦 | 0 | ||
修正時刻 |
弦 | 0 | ||
リスト削除時間 |
弦 | 0 | ||
説明 |
弦 | 0 | 製品詳細 | |
desc_img |
ミックス | 0 | [] | 製品詳細写真 |
アイテム画像 |
ミックス | 0 | アイテム画像[] | 製品画像 |
アイテムの重量 |
弦 | 0 | ||
アイテムサイズ |
弦 | 0 | ||
位置 |
弦 | 0 | 出荷地 | |
特急料金 |
浮く | 0 | 0.00 | 宅配便料金 |
ems_fee |
浮く | 0 | EMS料金 | |
郵便料金 |
浮く | 0 | 物流費 | |
への配送 |
弦 | 0 | 送り先 | |
割引あり |
ブール値 | 0 | 間違い | 割引はありますか? |
ビデオ |
ビデオ[] | 0 | 製品ビデオ | |
is_virtual |
弦 | 0 | ||
is_プロモーション |
ブール値 | 0 | 間違い | 昇進か否か |
小道具名 |
弦 | 0 | 1627207:1347647754:颜色分类:长方形带开瓶器+送工具刀卡+链子;1627207:1347647753:颜色分类:椭圆形带开瓶器+送工具刀卡+链子; | 商品属性名。格式为pid1:vid1:name1:value1;pid1:vid2:name2:value2。 |
prop_imgs |
prop_imgs[] | 0 | 商品属性图片列表 | |
property_alias |
String | 0 | 20509:9974422:36;1627207:28326:红色;20509:9975710:38;1627207:28326:红色;20509:9981357:40;1627207:28326:红色 | 销售属性值别名。格式为pid1:vid1:alias1;pid1:vid2:alia2。 |
props |
Mix | 0 | [{ "name": "产地","value": "中国" }] | 商品属性 |
total_sold |
Int | 0 | ||
skus |
skus[] | 0 | 商品规格信息列表 | |
seller_id |
Int | 0 | 2844096782 | 卖家ID |
sales |
Int | 0 | 138 | 销量 |
shop_id |
Int | 0 | 151372205 | 店铺ID |
props_list |
Mix | 0 | {20509:9974422: 尺码:36} | 商品属性 |
seller_info |
seller_info[] | 1 | 卖家信息 | |
tmall |
Boolean | 0 | false | 是否天猫 |
error |
String | 0 | 错误信息 | |
warning |
String | 0 | 警告信息 | |
url_log |
Mix | 0 | [] | |
favcount |
Int | 0 | 0 | |
fanscount |
Int | 0 | 0 | |
method |
String | 0 | item_tmall:pget_item | |
promo_type |
String | 0 | ||
props_img |
Mix | 0 | 1627207:28326": "//img.alicdn.com/imgextra/i2/2844096782/O1CN01VrjpXt1zyCc9DvERE_!!2844096782.jpg | 属性图片 |
shop_item |
Mix | 0 | [] | |
relate_items |
Mix | 0 | [] |
6、针对异步回调的说明
例如:B公司对异步回调说明如下:
异步回调:
一部の特定のインターフェイスは結果を非同期で返す必要があるため、販売者 A はコールバック アドレスを提供し、base64 でエンコードして、HTTP リクエスト ヘッダーの callback_url で構成する必要があります。
応答メカニズム:
応答メカニズムは、販売者 A が会社 B からデータ通知を受信すると、大文字と小文字が区別されない成功文字列を書き戻す必要があることを意味します。会社 B が「成功」を受信すると、販売者 A が通知を受信したと見なされます。 ; それ以外の場合は、リクエストを繰り返し続けるため、1 秒、5 秒、30 秒の間隔でインターフェイスを 3 回コールバックします。アクセスが 4 回失敗した場合、コールバックは 3 時間ごとにポーリングされ続けます。
コールバック復号化:
コールバックは AES を使用して暗号化されているため、使用前に復号化する必要があります。ネットワーク変動によるコールバック失敗を避けるため、また長期間コールバックがない場合は、お気軽にお問い合わせください。
7. リクエスト本文の暗号化の手順と例
データはAESにより暗号化され、暗号化後のデータの値として利用されます。
例:
暗号化前:
暗号化後:
8. コールバック復号化の手順と例
データはAESを使用して復号化され、データ値部分が復号化され、復号化された後のjson文字列になります。
復号化前:
復号化後:
9. 通常、B 社はコード値についても説明します。
5. 接続する API を決定する
通常であれば、あるプロジェクトに必要なAPIはB社が提供しており、接続するAPIの数は少ないことが多いため、どのAPIメソッドに接続するのかを確認する必要があります。API の要件に従って接続するだけで済みます。
6. API ドキュメントに従って、いくつかの基本的なツール クラスを作成します。
ツールは 2 つのカテゴリに分類されます。最初のカテゴリのツールについては、B 社がデモを提供するので、それをそのまま使用できます。もう 1 つのタイプは、API 要件に従って自分で記述する必要があります。
7. API ドキュメントに従って必要な DTO を作成します。
APIごとに主にリクエストDTO、レスポンスDTO、コールバックレスポンスDTOがあり、APIの要件を把握し、要件を満たすDTOを記述する必要があります。
もちろん、一部の DTO はクラスに抽象化できます (たとえば、一般応答 DTO とコールバック応答 DTO は同じです)。このとき、DTO に抽象化できます。
8. 各APIメソッドを接続する
上記の準備が完了したら、インターフェイスを 1 つずつ接続できます。次の方法を使用して、インターフェイスを 1 つずつ接続できます。