Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

取得可能なデータの追加とQuery/Mutationの追加のドキュメントを追加 #82

Merged
merged 4 commits into from
Aug 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions docs/_pages/customize/allow_list.md
Original file line number Diff line number Diff line change
@@ -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` でも定義できます。
62 changes: 62 additions & 0 deletions docs/_pages/customize/query.md
Original file line number Diff line number Diff line change
@@ -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
<?php

namespace Customize\GraphQL\Query;

use GraphQL\Type\Definition\Type;
use Plugin\Api\GraphQL\Query;

class HelloQuery implements Query
{
public function getName()
{
return 'hello';
}

public function getQuery()
{
return [
'type' => 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` にあります。
7 changes: 7 additions & 0 deletions docs/_pages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,10 @@ GraphQL の Mutation で以下のデータを更新可能です。

- [商品在庫の更新](mutation/product_stock)
- [出荷ステータスの更新](mutation/update_shipped)

## 拡張機構

CustomizeディレクトリやプラグインでAPIを拡張できます。

- [取得可能なデータの追加](customize/allow_list)
- [Query/Mutationの追加](customize/query)