#author("2023-10-01T00:03:03+09:00","","") #author("2023-10-01T00:03:29+09:00","","") [[FrontPage]] &size(24){リクエストAPI/食品情報提供}; * API情報 [#q6190828] |~名称|食品情報提供| |~APIバージョン|2| |~認証タイプ|アプリケーションキーペア| |~URL|https://(ホスト名)/requests/api2/(accode)/food/regist/| |~URL|https://(サーバー名)/requests/api2/(accode)/food/regist/| |~Method|POST| * 概要 [#jfe13a2c] 食品情報を提供する。提供された情報は食品登録候補として保存される。食品として登録された場合にはメール等で通知される。 ** 使用方法 [#c62c913f] *** 画像情報を含まない場合 [#ve1ab728] 画像情報がない場合、リクエストボディにJSONデータをセットして送信する。 *** 画像情報を含む場合 [#wad6a3a9] 画像情報がある場合、リクエストボディにマルチパート形式でJSONデータ及び画像データをセットして送信する。 画像情報がない場合でもマルチパート形式での送信は利用可能(updataのみ送信する)。 |name|value(partの中身)|h |updata|登録するJSONデータ| |(JSONデータ内で指定)|画像データ| ** リクエスト [#l9016c71] *** 登録情報 [#l9016c71] 登録する情報は以下の通り。 食品リクエストの場合 - 食品名・商品名 食品の名前や商品の名前等 (必須) 修正リクエストの場合 - 修正対象の食品オブジェクトID (必須) 共通 - メーカー名 商品等の場合、製造メーカー、店名など (任意) - 備考 参考となる情報など (任意) - 画像 参考となる画像 (任意) - コールバック情報 リクエスト処理後にコールバックするための情報 (任意) *** レート制限 [#ea6a4043] 本APIは、以下のレート制限を行う。 直近1分以内に登録数5以内、且つ直近60分以内に登録数30以内。 *** JSONデータ書式 [#o8fa0685] リクエスト本体 { 'type' : 'request', 'ver' : 1, 'appkey' : (割り当てられたアプリケーションキー), 'nonce' : (毎回異なる16バイト以上のランダムに生成されたASCII文字列), 'secret' : (アプリケーションシークレット+nonceのSHA256値), 'objects' : [ (登録する食品/修正リクエストオブジェクト), (登録する食品/修正リクエストオブジェクト), ], 'dryrun' : (テストの時true,実際には登録されない) } |key|必須|項目|内容|h |type|必須|タイプ|固定値 request| |ver|必須|バージョン|固定値 1| |appkey|必須|アプリケーションキー|アクセスを識別する、割り当てられたアプリケーションキー| |nonce|必須|ナンス|ランダム文字列。半角英数で構成し、16バイト以上、アクセス毎に異なること| |secret|必須|認証文字列|アプリケーションシークレット+nonceのSHA256値| |objects|必須|食品リクエストオブジェクト|登録する食品リクエストオブジェクトの配列| |dryrun|任意|テスト実行|trueを指定すると実際には登録されない| 食品リクエストオブジェクト { 'type' : 'food', 'ver' : 1, 'name' : (食品名・商品名), 'maker' : (メーカー名), 'optinfo' : (備考), 'pictids' : [ (画像のformid), (画像のformid) ], 'callback' : (コールバックオブジェクト), 'state' : (任意の文字列), } 修正リクエストオブジェクト { 'type' : 'correct', 'ver' : 1, 'objectid' : (修正対象の食品オブジェクトID), 'maker' : (メーカー名等), 'optinfo' : (修正に関する情報), 'pictids' : [ (画像のformid), (画像のformid) ], 'callback' : (コールバックオブジェクト), 'state' : (任意の文字列), } |key|制限|項目|内容|h |type|必須|タイプ|固定値 食品リクエストオブジェクト=food 修正リクエストオブジェクト=correct| |ver|必須|バージョン|固定値 1| |name|食品リクエスト時必須/最大256byte|食品名・商品名|食品の名前や商品の名前等| |objectid|修正リクエスト時必須/最大32byte|オブジェクトID|修正対象の食品オブジェクトID| |maker|任意/最大256byte|メーカー名|商品等の場合、製造メーカー、店名など| |optinfo|任意/最大1024byte|備考|参考となる情報など| |pictids|任意|画像|参考となる画像(jpeg形式、1枚あたり最大2Mbyte、1オブジェクトに対して最大2枚まで)のformidの配列| |callback|任意|コールバック情報|リクエスト処理後にコールバックするための情報を示すコールバックオブジェクト| |state|任意/最大512byte|ステート情報|オブジェクトに付属する任意の文字列| コールバックオブジェクト メールの場合 { 'type' : 'mail', 'ver' : 1, 'mailaddr' : (メールアドレス), } HTTPの場合 { 'type' : 'url', 'ver' : 1, 'url' : (URL), 'method' : (GET/POST), 'body' : (コールバックのリクエストボディ) } |key|必須|項目|内容|h |type|必須|タイプ|メール=mail/HTTP=url| |ver|必須|バージョン|固定値 1| |mailaddr|type=mailの時必須|メールアドレス|送付先メールアドレス,宛先のドメイン制限を行う場合がある| |url|type=urlの時必須/最大4096byte|URL|アクセス先URL,httpsであること,ドメイン制限を行う場合がある| |method|任意|httpメソッド|コールバックアクセスのメソッド GET/POST| |body|任意/最大512byte|リクエストボディ|コールバックアクセスのリクエストボディ| *** データ制限 [#v5086aca] 1回のリクエスト処理について、登録するオブジェクトの最大数は5まで。 1回のリクエスト処理について、リクエストボディの最大サイズは20Mまで。 ** コールバック処理 [#f1e5a4fb] コールバックオブジェクトが設定されたリクエストが処理された場合、指定に従ってコールバック処理を行う。 コールバックには、以下の情報を含む。 |name|内容|h |action|処理の種別。registed=食品が登録された/rejected=食品は登録されなかった/test=コールバックのテスト| |regid|結果オブジェクトに含まれていた登録結果ID| |state|食品リクエストオブジェクトにstateが存在した場合その値| *** メールによるコールバック [#r3485a80] 指定されたメールアドレスにメールが送信される。 メールの本文に、結果オブジェクトのregid及び食品リクエストオブジェクトのstateを含むjsonが記述される。 メールコールバック本文 { 'type' : 'callback', 'ver' : 1, 'action' : registed/rejected/test, 'regid' : (登録結果ID), 'state' : (食品リクエストボディオブジェクトにstateが存在すればその値) } *** URLによるコールバック [#m4b50ff6] 指定されたURLにアクセスを行う。 methodがGET,POSTどちらであっても、アクセス先URLに querystring として以下が追加される。 action=(処理内容)®id=(登録結果ID)&state=(食品リクエストボディオブジェクトにstateが存在すればその値) methodがPOSTの場合、リクエストボディは設定された内容となる。 *** リクエスト例 [#i994a280] #html{{ <pre class="brush:xml;"> { "type": "request", "ver": 1, "appkey": "f37dX1DZdSAV3s9v", "nonce": "6b785fce3a643ec4", "secret": "ef7128c7001e63b1f89e3f9317b173dd567b0fead891e196127eef62c9f1fe19", "objects": [ { "type": "food", "ver": 1, "name": "\u590f\u91ce\u83dc\u306e\u30ab\u30ec\u30fc\u30aa\u30e0\u305d\u3070", "maker": "IMD\u98df\u5802", "optinfo": "\u671f\u9593\u9650\u5b9a\u30e1\u30cb\u30e5\u30fc\u3067\u3059\u3002", "pictids": [ "UploadPictFile000" ], "callback": { "type": "url", "ver": 1, "url": "https:\/\/callback.my.server\/?test=1234\u0026code=5678", "method": "POST", "body": "request=body\u0026command=hogehoge" }, "state": "mystate_1234567890" } ] }</pre> }} ** レスポンス [#b7e56e30] 成功時、レスポンスコードは200を返す。 失敗時、レスポンスコードは400を返す。 レスポンスはjson形式である。 { 'result' : true/false, 'reason' : (resultがfalseの時: 失敗事由), 'registed' : [ (結果オブジェクト), (結果オブジェクト), ] 結果オブジェクト { 'type' : 'registration', 'ver' : 1, 'result' : true/false, 'reason' : (resultがfalseの時: 失敗事由), 'regid' : (登録結果ID), 'state' : (登録するオブジェクトにstateが存在すればその値) } |key|項目|内容|h |type|タイプ|固定値 registration| |ver|バージョン|固定値 1| |regid|登録結果ID|result=trueの時、登録されたオブジェクトを識別するID| |state|ステート情報|登録するオブジェクトに設定されているstate値| |result|処理結果|成功時true| |reason|エラー情報|result=falseの時、エラー情報を格納| *** レスポンス例 [#i994a280] #html{{ <pre class="brush:xml;"> { "result": true, "registed": [ { "type": "registration", "ver": 1, "regid":"20230819154859-JVyL2OxHIhFcKX7fjOPIpf2UfEv0e7kP4FNgajAyLGxKDlRBf", "state": "mystate_1234567890", "result": true } ] }</pre> }} * サンプルソース [#ne721aef] ** 写真なしの場合 [#x1a7079c] &linkr(../requestapi/htmlinsert/sample_eapirequest_food.php){ダウンロード:sample_eapirequest_food.php}; #html{{ <pre class="brush:php;"> }} #htmlinsert(sample_eapirequest_food.php) #html{{ </pre> }} ** 写真ありの場合 [#v541fd0e] &linkr(../requestapi/htmlinsert/sample_eapirequest_foodpict.php){ダウンロード:sample_eapirequest_foodpict.php}; #html{{ <pre class="brush:php;"> }} #htmlinsert(sample_eapirequest_foodpict.php) #html{{ </pre> }} * 仕様変更履歴 [#t05ebefa] 2023/08/10 作成 このドキュメントのバージョン情報 |Version|2| |Revision|1| |Editor|IMD|