C#でGraphQLを試したい
GjangoでGraphQLのライブラリを使ったところ思ってたよりも簡単に書けたので、これはC#でも行けるのでは?と思い試しにサンプルコードを動かすに至りました。
やることは簡単、Schemaを定義してQueryとMutationを書けばGraphQL APIの完成です。
C#でGraphQLを試すサンプルコードがあったのでそれを参考にして備忘録です。
参考リンク
色々調べた結果たどり着いたリンクたち。
-
GraphQL .NET
- 今回使用するライブラリのドキュメントです。
-
サンプルコード
- 今回使用するサンプルコード。examples/src/AspNetCoreに配置されているプロジェクトを使用しました。
-
サンプルデータ
- ドキュメントと同じスターウォーズのキャラクターがサンプルデータとして使われています。スターウォーズ見たことない人はこちらを参考に。
-
「GraphQL」徹底入門 ─ RESTとの比較、API・フロント双方の実装から学ぶ
- GraphQLの用語の説明・実際に使用するときに生じる問題点など、とても参考になりました。
とりあえず動かしてみる
ソースコードをクローンして動かしてみましょう
# サンプルコードをクローンします
git clone https://github.com/graphql-dotnet/examples.git
# 使用するプロジェクトへ移動
cd examples\src\AspNetCore
# スクリプトを実行(中身はdotnet CLIのコマンドを実行してるだけ)
./run.sh
実行したらhttp://localhost:3000/ui/playgroundへアクセスします。
上のような画面が表示されるかと思うのでこれでGraphQLを試す環境が整いました。
以下のコマンドでサンプルコードのテストができます。
Mutationを実行
mutation {
createHuman(human:{ name: "hoge_001", homePlanet: "hogehogeplanet"}) {
name
homePlanet
}
}
Queryを実行
query {
human(id:"1"){
name
}
}
Schema
Schema Type
SchemaにはQueryとMutationを定義します。
public class StarWarsSchema : Schema
{
public StarWarsSchema(IServiceProvider provider)
: base(provider)
{
Query = provider.GetRequiredService<StarWarsQuery>();
Mutation = provider.GetRequiredService<StarWarsMutation>();
}
}
またQueryとMutationで使うクラスは以下のようになります。
以下のクラスのプロパティがQueryとMutaitionのフィールド名と対応します。
public abstract class StarWarsCharacter
{
public string Id { get; set; }
public string Name { get; set; }
public string[] Friends { get; set; }
public int[] AppearsIn { get; set; }
}
public class Human : StarWarsCharacter
{
public string HomePlanet { get; set; }
}
public class Droid : StarWarsCharacter
{
public string PrimaryFunction { get; set; }
}
Query
Queryにはデータを取得するための処理を書きます。
public class StarWarsQuery : ObjectGraphType<object>
{
public StarWarsQuery(StarWarsData data)
{
// クエリあることを設定する
Name = "Query";
// heroというクエリを定義 ↓LINQが書ける
Field<CharacterInterface>("hero", resolve: context => data.GetDroidByIdAsync("3"));
}
}
Mutation
追々書きます。
Author And Source
この問題について(C#でGraphQLを試したい), 我々は、より多くの情報をここで見つけました https://qiita.com/debonn/items/cb5da4414951d12cee06著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .