diff --git a/docs/_pages/customize/allow_list.md b/docs/_pages/customize/allow_list.md new file mode 100644 index 0000000..a2973b1 --- /dev/null +++ b/docs/_pages/customize/allow_list.md @@ -0,0 +1,49 @@ +--- +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', ... ] + # 以降省略 +``` + +許可リスト方式のため、カスタマイズで追加された 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/customize/query.md b/docs/_pages/customize/query.md new file mode 100644 index 0000000..de14a2b --- /dev/null +++ b/docs/_pages/customize/query.md @@ -0,0 +1,62 @@ +--- +layout: home +author_profile: true +permalink: /customize/query +--- + +## Query/Mutationの追加 + +Query は `Plugin\Api\GraphQL\Query` インタフェースを、 Mutation は `Plugin\Api\GraphQL\Mutation` インタフェースを実装したクラスを作成することで Query/Mutation の追加が可能です。 + +`Hello Query!` の文字列を返す最小のQueryの実装例は以下です。 + +```php + Type::string(), + 'resolve' => function ($root) { + return 'Hello Query!'; + }, + ]; + } +} +``` + +リクエスト + +```graphql +query { + hello +} +``` + +レスポンス + +```json +{ + "data": { + "hello": "Hello Query!" + } +} +``` + +同様に `Mutation` を実装し、 `resolve` 内で更新処理を記載すると Mutation を追加できます。 + +### 参考 + +プラグインのデフォルトの Query および Mutation の実装は `Api/GraphQL/Query` および `Api/GraphQL/Mutation` にあります。 diff --git a/docs/_pages/index.md b/docs/_pages/index.md index 36332ac..150bb52 100644 --- a/docs/_pages/index.md +++ b/docs/_pages/index.md @@ -124,3 +124,10 @@ GraphQL の Mutation で以下のデータを更新可能です。 - [商品在庫の更新](mutation/product_stock) - [出荷ステータスの更新](mutation/update_shipped) + +## 拡張機構 + +CustomizeディレクトリやプラグインでAPIを拡張できます。 + +- [取得可能なデータの追加](customize/allow_list) +- [Query/Mutationの追加](customize/query)