From 129405acb20035c96dc7f33c7f55388d3d9a8b12 Mon Sep 17 00:00:00 2001 From: hideki_okajima Date: Tue, 4 Aug 2020 16:37:12 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=83=AA=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AE=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=9E=E3=82=A4?= =?UTF-8?q?=E3=82=BA=E6=96=B9=E6=B3=95=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/_pages/customize/allow_list.md | 52 +++++++++++++++++++++++++++++ docs/_pages/index.md | 6 ++++ 2 files changed, 58 insertions(+) create mode 100644 docs/_pages/customize/allow_list.md diff --git a/docs/_pages/customize/allow_list.md b/docs/_pages/customize/allow_list.md new file mode 100644 index 0000000..dcb38b8 --- /dev/null +++ b/docs/_pages/customize/allow_list.md @@ -0,0 +1,52 @@ +--- +layout: home +author_profile: true +permalink: /customize/allow_list +--- + +## 取得可能なデータの追加 + +取得可能なデータは許可リスト方式で設定されています。 + +デフォルトの許可リストは `Resource/config/services.yaml` に定義されています。 + +```yaml + +# 省略 + +services: + + # 省略 + + core.api.allow_list: + class: ArrayObject + tags: ['eccube.api.allow_list'] + arguments: + - # + Eccube\Entity\AuthorityRole: ['id', 'deny_url', 'create_date', 'update_date', 'Authority', 'Creator'] + Eccube\Entity\BaseInfo: ['id', 'company_name', 'company_kana', 'postal_code', 'addr01', 'addr02', 'phone_number', 'business_hour', 'email01', 'email02', 'email03', 'email04', 'shop_name', 'shop_kana', 'shop_name_eng', 'update_date', 'good_traded', 'message', 'delivery_free_amount', 'delivery_free_quantity', 'option_mypage_order_status_display', 'option_nostock_hidden', 'option_favorite_product', 'option_product_delivery_fee', 'option_product_tax_rule', 'option_customer_activate', 'option_remember_me', 'php_path', 'option_point', 'basic_point_rate', 'point_conversion_rate', 'Country', 'Pref'] + Eccube\Entity\Block: ['id', 'name', 'file_name', 'use_controller', 'deletable', 'create_date', 'update_date', 'BlockPositions', 'DeviceType'] + Eccube\Entity\BlockPosition: ['section', 'block_id', 'layout_id', 'block_row', 'Block', 'Layout'] + Eccube\Entity\Cart: ['id', 'cart_key', 'pre_order_id', 'total_price', 'delivery_fee_total', 'sort_no', 'create_date', 'update_date', 'add_point', 'use_point', 'Customer', 'CartItems'] + # 以降省略 +``` + +許可リスト方式のため、カスタマイズで追加された Entity はデフォルトで取得できません。 +カスタマイズで追加された Entity の取得を許可する場合は `eccube.api.allow_list` タグを付けたコンポーネントを定義します。 +サービスIDは `[プラグインコード].api.allow_list` の形を推奨します。 + +例えばメーカー管理プラグインで利用する場合は以下のような `ArrayObject` の定義をプラグイン内の `services.yaml` に追加します。 + +```yaml +services: + + maker4.api.allow_list: + class: ArrayObject + tags: ['eccube.api.allow_list'] + arguments: + - # + Eccube\Entity\Product: ['maker_url', 'Maker'] + Plugin\Maker4\Entity\Maker: ['id', 'name', 'sort_no', 'create_date', 'update_date'] +``` + +プラグインに許可リストが含まれない場合は、 `Customize` ディレクトリ以下の `services.yaml` でも定義できます。 diff --git a/docs/_pages/index.md b/docs/_pages/index.md index fa2ae94..214f747 100644 --- a/docs/_pages/index.md +++ b/docs/_pages/index.md @@ -122,3 +122,9 @@ GraphQL の Mutation で以下のデータを更新可能です。 - [商品在庫の更新](mutation/product_stock) - [出荷ステータスの更新](mutation/update_shipped) + +## 拡張機構 + +CustomizeディレクトリやプラグインでAPIを拡張できます。 + +- [取得可能なデータの追加](customize/allow_list) From b8786fa4acf79064b90e9dbb61fadb386e07676c Mon Sep 17 00:00:00 2001 From: hideki_okajima Date: Tue, 4 Aug 2020 18:18:44 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=ABQuery=E3=81=AE=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=9E=E3=82=A4=E3=82=BA=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/_pages/customize/query.md | 67 ++++++++++++++++++++++++++++++++++ docs/_pages/index.md | 1 + 2 files changed, 68 insertions(+) create mode 100644 docs/_pages/customize/query.md diff --git a/docs/_pages/customize/query.md b/docs/_pages/customize/query.md new file mode 100644 index 0000000..3326ba5 --- /dev/null +++ b/docs/_pages/customize/query.md @@ -0,0 +1,67 @@ +--- +layout: home +author_profile: true +permalink: /customize/query +--- + +## Query/Mutationの追加 + +特定のインタフェースを実装したクラスを作成することでQuery/Mutationの追加が可能です + +| Method | Interface | +|----------------|-------------------------------------| +| Query | Plugin\Api\GraphQL\Query | +| Mutation | Plugin\Api\GraphQL\Mutation | + +`Hello Query!` の文字列を返す最小のQueryの実装例は以下です。 + +```php + Type::string(), + 'resolve' => function ($root) { + return 'Hello Query!'; + }, + ]; + } +} +``` + +リクエスト + +```graphql +query { + hello +} +``` + +レスポンス + +```json +{ + "data": { + "hello": null + } +} +``` + +同様に `Mutation` を実装し、 `resolve` 内で更新処理を記載すると Mutation を追加できます。 + +### 参考 + +プラグインのデフォルトの Query および Mutation の実装は `Api/GraphQL/Query` および `Api/GraphQL/Mutation` にあります。 diff --git a/docs/_pages/index.md b/docs/_pages/index.md index 214f747..3bfcab2 100644 --- a/docs/_pages/index.md +++ b/docs/_pages/index.md @@ -128,3 +128,4 @@ GraphQL の Mutation で以下のデータを更新可能です。 CustomizeディレクトリやプラグインでAPIを拡張できます。 - [取得可能なデータの追加](customize/allow_list) +- [Query/Mutationの追加](customize/query) From 2ba45d8ffc4699de7427c1b030a9c68ccf7e02a0 Mon Sep 17 00:00:00 2001 From: hideki_okajima Date: Tue, 4 Aug 2020 18:21:27 +0900 Subject: [PATCH 3/4] =?UTF-8?q?allow=5Flist=20=E3=81=AE=E4=BE=8B=E3=81=8C?= =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=A0=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E7=9F=AD=E3=81=8F=E7=9C=81=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/_pages/customize/allow_list.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/_pages/customize/allow_list.md b/docs/_pages/customize/allow_list.md index dcb38b8..a2973b1 100644 --- a/docs/_pages/customize/allow_list.md +++ b/docs/_pages/customize/allow_list.md @@ -24,10 +24,7 @@ services: arguments: - # Eccube\Entity\AuthorityRole: ['id', 'deny_url', 'create_date', 'update_date', 'Authority', 'Creator'] - Eccube\Entity\BaseInfo: ['id', 'company_name', 'company_kana', 'postal_code', 'addr01', 'addr02', 'phone_number', 'business_hour', 'email01', 'email02', 'email03', 'email04', 'shop_name', 'shop_kana', 'shop_name_eng', 'update_date', 'good_traded', 'message', 'delivery_free_amount', 'delivery_free_quantity', 'option_mypage_order_status_display', 'option_nostock_hidden', 'option_favorite_product', 'option_product_delivery_fee', 'option_product_tax_rule', 'option_customer_activate', 'option_remember_me', 'php_path', 'option_point', 'basic_point_rate', 'point_conversion_rate', 'Country', 'Pref'] - Eccube\Entity\Block: ['id', 'name', 'file_name', 'use_controller', 'deletable', 'create_date', 'update_date', 'BlockPositions', 'DeviceType'] - Eccube\Entity\BlockPosition: ['section', 'block_id', 'layout_id', 'block_row', 'Block', 'Layout'] - Eccube\Entity\Cart: ['id', 'cart_key', 'pre_order_id', 'total_price', 'delivery_fee_total', 'sort_no', 'create_date', 'update_date', 'add_point', 'use_point', 'Customer', 'CartItems'] + Eccube\Entity\BaseInfo: ['id', 'company_name', 'company_kana', 'postal_code', 'addr01', 'addr02', ... ] # 以降省略 ``` From 065c878e3eb3b5910f6cf24339dad940c65a196d Mon Sep 17 00:00:00 2001 From: hideki_okajima Date: Tue, 4 Aug 2020 19:01:10 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8C=87=E6=91=98=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/_pages/customize/query.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/_pages/customize/query.md b/docs/_pages/customize/query.md index 3326ba5..de14a2b 100644 --- a/docs/_pages/customize/query.md +++ b/docs/_pages/customize/query.md @@ -6,12 +6,7 @@ permalink: /customize/query ## Query/Mutationの追加 -特定のインタフェースを実装したクラスを作成することでQuery/Mutationの追加が可能です - -| Method | Interface | -|----------------|-------------------------------------| -| Query | Plugin\Api\GraphQL\Query | -| Mutation | Plugin\Api\GraphQL\Mutation | +Query は `Plugin\Api\GraphQL\Query` インタフェースを、 Mutation は `Plugin\Api\GraphQL\Mutation` インタフェースを実装したクラスを作成することで Query/Mutation の追加が可能です。 `Hello Query!` の文字列を返す最小のQueryの実装例は以下です。 @@ -55,7 +50,7 @@ query { ```json { "data": { - "hello": null + "hello": "Hello Query!" } } ```