Labo

EC-CUBE3 分室

【3.0.15】EC-CUBE API プラグイン(2)

2017年09月16日 / 投稿者名:chiharu


さて今回から API プラグインにて何が出来るのかを確認して行きたいと思います。
資料を軽く読み流してみましたが、とりあえず Database へのアクセスは色々出来そうですね。
基本概要を見る限り、データの読み込み/変更はできそうです。
削除も可能なようですが、物理削除では無く論理削除のみのようです。
 
しかしながら現時点では公開情報についての会員別表示の可否などの細かな処理は出来ない様です。
まぁ、EC-CUBE本体に会員別の表示/非表示を行う機能が無い状況では当たり前でしょう(笑)
会員ログインや管理者ログインは対応されているので必要十分と云った内容です。
 
 
とりあえず、今回は開発方針などの踏み込んだ話では無く簡単にデータが取得できるかを確認したいと思います。
基本的には取得できる情報は大きく分けて2種類に分けられます。
認証が必要な情報(会員・管理者ログイン)と一般公開の情報です。
 
当たり前のことですがログインしないと表示できない情報に関してはログイン判定が必要です。
認証処理はガッツリ開発を行わないと難しそうなんで今回は省略して一般公開の情報から確認します(笑)
 
ちなみに認証フローには以下のものに対応しているようです。
 
 OAuth2.0 Authorization Code Flow – 主にWebアプリ向け
 OAuth2.0 Implicit Flow – 主にJavaScript、 ネイティブアプリ向け
 OpenID Connect Authorization Code Flow – 主にWebアプリ向け
 OpenID Connect Implicit Flow – 主にJavaScript、 ネイティブアプリ向け
 
う~ん、会社にて使用する場合には以下を選択することになりそうですね。
 「OAuth2.0 Authorization Code Flow」
 「OpenID Connect Authorization Code Flow」
 
しかし、Webアプリの開発するぐらいなら EC-CUBE 自体をカスタマイズする気もします。
まぁ、実際には複合的なポータルサイトのような構成を想定するので案件規模によりますね。
 
主体はネイティブアプリに置いて考えるのかは考える必要がありますね。
・・・ネイティブアプリの開発依頼が来たときはその時考えれば良いでしょう。
この辺りはサンプルも沢山ありますしね
 
 
さて、気を取り直して一般公開の情報の取得方法から行って行きたいと思います。
本来ならば環境構築する必要はありますが、今回は簡単に URL のアクセスを行ってみます。
当たり前のことではありますが手当たり次第に URL を検索してもデータは取得できません。
基本的には APIエンドポイント を確認する必要があります。
 
APIエンドポイントを確認してみると、現在のテーブル状況や権限が記載されています。
今回重要な内容としては「リソース名」と「単一リソースの指定」です。
例えばAPIエンドポイントを確認して read が認証不要な情報を確認してみましょう。
今回の例で云うと「商品」テーブルの全件情報を取得してみます。

http://<API導入済みEC-CUBE用ドメイン>/api/v0/product

実行した結果が以下の内容です。

{"product":[{"_calc":false,"stockFinds":[],"stocks":[],"stockUnlimiteds":[],"price01":[],"price02":[],"price01IncTaxs":[],"price02IncTaxs":[],"codes":[],"classCategories1":[],"classCategories2":[],"className1":null,"className2":null,"id":1,"name":"\u30c7\u30a3\u30ca\u30fc\u30d5\u30a9\u30fc\u30af","description_list":null,"description_detail":"\u30bb\u30c3\u30c8\u3067\u63c3\u3048\u305f\u3044\u30c7\u30a3\u30ca\u30fc\u7528\u306e\u30ab\u30c8\u30e9\u30ea\u30fc\u3002\r\n\u5b9a\u756a\u306e\u9280\u88fd\u306f\u3001\u30b7\u30eb\u30d0\u30fc\u7279\u6709\u306e\u7f8e\u3057\u3044\u8f1d\u304d\u3068\u67d4\u3089\u304b\u306a\u66f2\u7dda\u304c\u7279\u5fb4\u3067\u3059\u3002\u9069\u5ea6\u306a\u91cd\u307f\u3068\u65e5\u672c\u4eba\u306e\u624b\u306b\u5408\u3044\u3084\u3059\u3044\u30b5\u30a4\u30ba\u611f\u3067\u9577\u304f\u611b\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002\r\n\u6700\u9ad8\u7d1a\u30d7\u30e9\u30c1\u30ca\u30d5\u30a9\u30fc\u30af\u306f\u3001\u8d08\u308a\u7269\u3068\u3057\u3066\u3082\u4eba\u6c17\u3067\u3059\u3002","free_area":null,"ProductCategories":[{"product_id":1,"category_id":1},{"product_id":1,"category_id":3},{"product_id":1,"category_id":5},{"product_id":1,"category_id":6}],"ProductClasses":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},{"id":8},{"id":9}],"ProductImage":[{"id":1},{"id":2},{"id":3}]},{"_calc":false,"stockFinds":[],"stocks":[],"stockUnlimiteds":[],"price01":[],"price02":[],"price01IncTaxs":[],"price02IncTaxs":[],"codes":[],"classCategories1":[],"classCategories2":[],"className1":null,"className2":null,"id":2,"name":"\u30d1\u30fc\u30b3\u30ec\u30fc\u30bf\u30fc","description_list":null,"description_detail":"\u30d1\u30fc\u30b3\u30ec\u30fc\u30bf\u30fc\u306f\u30b3\u30fc\u30d2\u30fc\u306e\u7c89\u3092\u30bb\u30c3\u30c8\u3057\u3066\u76f4\u706b\u306b\u304b\u3051\u3066\u62bd\u51fa\u3059\u308b\u5668\u5177\u3067\u3059\u3002\r\n\u30a2\u30a6\u30c8\u30c9\u30a2\u3067\u3082\u6df9\u308c\u305f\u3066\u306e\u30b3\u30fc\u30d2\u30fc\u3092\u304a\u697d\u3057\u307f\u3044\u305f\u3060\u3051\u307e\u3059\u3002\r\n\u3044\u307e\u3060\u3051\u3001\u304a\u3044\u3057\u3044\u6df9\u308c\u65b9\u306e\u518a\u5b50\u3064\u304d\u3067\u3059\u3002","free_area":"\u3053\u3053\u304c\u30d5\u30ea\u30fc\u30a8\u30ea\u30a2\u3067\u3059\u3088","ProductCategories":[{"product_id":2,"category_id":1},{"product_id":2,"category_id":3},{"product_id":2,"category_id":4},{"product_id":2,"category_id":5}],"ProductClasses":[{"id":10}],"CustomerFavoriteProducts":[{"id":1}],"ProductImage":[{"id":4},{"id":5},{"id":6}],"ProductTag":[{"id":34},{"id":35},{"id":36}]}]}

 
勿論ですが認証していない状況では認証が必要な情報にはアクセスできません。
例えば「受注」ですね。

http://<API導入済みEC-CUBE用ドメイン>/api/v0/order

実行した結果は空となり情報を取得することはできません。

{}

 
 
なお、本来であれば「単一リソースの指定」を設定すれば指定した情報のみを取得できると思うのですが何か違うようです。
この辺は改めて確認しないといけませんね。

http://<API導入済みEC-CUBE用ドメイン>/api/v0/product/1

上記で商品ID:1 の商品が取れるかと思っていたのですが以下のエラーが帰ってきます。

{"errors":[{"code":404,"message":"Not found"},{"code":400,"message":"Catchable Fatal Error: Argument 3 passed to Plugin\\EccubeApi\\Controller\\EccubeApiCRUDController::findEntity() must be an instance of Plugin\\EccubeApi\\Controller\\callable, instance of Closure given, called in \<インストールディレクトリ>\/public_html\/app\/Plugin\/EccubeApi\/Controller\/EccubeApiCRUDController.php on line 145 and defined"}]}

プログラムに問題があると云うよりは「指定の方法が異なるのかなぁ」とは考えています。
また来週にでも改めて挑戦するか、とりあえず別の機能を確認してみるか考えどころです。
 
 
う~ん、微妙に困るのが色々なところで記載されている情報が異なるところですね。
現時点ではβ版ですし、開発状況によって内容は変更されていくことは承知の上なのですが、もう少し情報がそろうと有難いですね。
 
EC-CUBE API 開発方針にもAPIのエンドポイントの記載があるのですが、今回参考にしたAPIエンドポイントとも差異がありました。
APIバージョニングにしても、現在のバージョンは 1.0.3 なのに「v0」にて動作している状況です。
開発方針と現在の進行状況が乖離しているのかもしれません・・・
 
とはいえ、開発を行っている方々が頑張っておられるのに使うだけの人間が苦情を言うのは筋が違いますね。
実施には別の場所に発表されていることを私が確認できていないだけの可能性もあります。
これからも暫くは調査を進めていきたいと思います。
 
と云うことで今回の調査内容はこの辺りとさせて頂きます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。