Skip to content

Commit

Permalink
Merge pull request #82 from okazy/feat/doc-api
Browse files Browse the repository at this point in the history
取得可能なデータの追加とQuery/Mutationの追加のドキュメントを追加
  • Loading branch information
Kiyotaka Oku authored Aug 4, 2020
2 parents 6fade7e + 065c878 commit fcdd99d
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
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 @@ -124,3 +124,10 @@ GraphQL の Mutation で以下のデータを更新可能です。

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

## 拡張機構

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

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

0 comments on commit fcdd99d

Please sign in to comment.