「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>WebAPI]]

* 目次 [#we1a6f3e]
#contents

*概要 [#u19665b0]
-簡単ではない(≒苦行)らしい。

-API(≒[[WebAPI]])のために作られた、
--データクエリとデータ操作のための言語
--保存されたデータに対してクエリを実行するランタイム

**経緯 [#e1cc2f88]
-2012年にFacebookの内部で開発され、2015年に公開。
-2018年11月7日、Linux Foundationがホストする~
新たに設立されたGraphQL Foundationに移譲された。

**特徴 [#r48da9c0]
-RESTやその他のWebサービスと比較して、
--効率的
--堅牢
--フレキシブル

>なアプローチを提供

-柔軟性と豊かな表現が可能なクエリ言語
--...
--反面、複雑さを加え、シンプルなAPIには適さない可能性。

*詳細 [#rf1dc347]

**構成 [#l278434a]
-型システム
-クエリ言語
-実行セマンティクス
-静的な検証
-型イントロスペクション

**機能 [#cb48d09d]

***機能概要 [#f83c34ce]
-クライアントが必要なデータの構造を定義することができ、

-サーバーからは定義したのと同じ構造のデータが返される。
--必要以上に大きなデータが返されるのを防ぐことができる。
--クエリ結果のウェブキャッシュの効果に影響を与える。

-基本的には、
--NoSQLが対象だが、RDBMSも対象にできる。
--GraphQLが直接的にDBとやりとりするわけではない。
--まず対象となるデータをすべて、前もってデータベースから取り出しておく。
--ここから、フィルタなどの処理を行い、必要なデータだけを取り出す。

***クエリと操作 [#da6049c0]
-読み込み(Query)
--Schemaクラスを定義する。
--Queryクラスに以下を実装。
--arguments~
argumentsを生成
--resolve~
argumentsを使ってresolveする。

-書き込み(Mutation)
-データのサブスクリプション(WebHooksで実装される)

**サポート [#p68b48fa]

***クライアント [#ta9da08c]
-Apollo
-Relay

※ JSクライアント。サーバも同梱。

***サーバ [#n84753e8]
[[Apollo、Relay>#ta9da08c]]以外は、~
個別のライブラリとして提供されているらしい。

-JavaScript、Perl、Python、Ruby、PHP
-Java、C#、Go
-Scala、Haskell、R、Clojure
-Elixir、Erlang

*参考 [#r48da518]
-GraphQL - Wikipedia~
https://ja.wikipedia.org/wiki/GraphQL

-C#(ASP.NET Core)で GraphQL API を提供する - miso_soup3 Blog~
https://miso-soup3.hateblo.jp/entry/2017/11/30/162445

**Qiita [#q1ca2892]
-Go + MongoDBでGraphQLを使ってみる~
https://qiita.com/y4u0t2a1r0/items/486f0d768cfff8f35216

-RDBでGraphQL使いたい~
https://qiita.com/lightstaff/items/7e7d5479a13469ab625a

-GraphQLは90%のウェブサービス開発者にはまだ時期尚早ではないか~
https://qiita.com/shibukawa/items/a913cb4912d32af37bc5

----
Tags: [[:.NET開発]], [[:通信技術]], [[:.NET Standard]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET Web API]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS