缩写/缩写
为什么用这个包来代替其他可用的 Elm GraphQL 包 ? 这是唯一的一个 为您的整个计划创建类型安全代码。 看看这个博客文章, Elm 中的安全类型和可编译图形QL了解这个图书馆的动机 (这也是唯一安全的型号) 包含 Elm 0.18 或 0.19 支持的库,参见 此语句线索) (中文(简体) ).
我建这个包裹是因为我想要的东西:
- 给您打入安全字的 GraphQL 查询(如果它编译出来,它根据计划是有效的),
- 以无缝和安全的方式为您创建解码器
- 消除有利于 Elm 语言构造的 GraphQL 特性,尽可能为更简单的 UX (例如 GraphQL 变量和片段应该只是 Elm 函数,常数, lets) .
见 关于Ellie的行动实例。在
examples/
文件夹.
概览
dillonkearns/elm-graphql 是一个 Elm 软件包和附带的命令行代码生成器,它为您的 GraphQL 端点创建了类型安全 Elm 代码。 你不为你的API写解码器 dillonkearns/elm-graphql,相反,您只是选择您想要的字段,类似于标准的 GraphQL 查询,但在 Elm 中。 例如,此 GraphQL 查询
query {
human(id: "1001") {
name
homePlanet
}
}
看着 像这样
内 dillonkearns/elm-graphql (此示例中的代码前缀为 StarWars 自动生成)
import Graphql.Operation exposing (RootQuery)
import Graphql.SelectionSet as SelectionSet exposing (SelectionSet)
import StarWars.Object
import StarWars.Object.Human as Human
import StarWars.Query as Query
import StarWars.Scalar exposing (Id(..))
query : SelectionSet (Maybe HumanData) RootQuery
query =
Query.human { id = Id "1001" } humanSelection
type alias HumanData =
{ name : String
, homePlanet : Maybe String
}
humanSelection : SelectionSet HumanData StarWars.Object.Human
humanSelection =
SelectionSet.map2 HumanData
Human.name
Human.homePlanet
GraphQL 和 Elm 是完美的匹配, 因为 GraphQL 用于强制执行您的 API 作为输入和输出的类型, 很像 Elm 的类型系统在 Elm 内部所做的 . elm-graphql 仅仅通过让您的 Elm 代码意识到您的 GraphQL 服务器的策略来弥补这个缺口 。 如果你是GraphQL新手的话, 图ql.org/learn/ (中文(简体) ) 是学习基本知识的好方法.
根据安装指令安装 @dillonkearns/elm-graphql
国家防范机制一揽子计划和适当的榆树一揽子计划(见 设置区域 详细情况请查阅.
一旦你安装了一切,运行 elm-graphql 代码生成工具
就这么简单:
npx @dillonkearns/elm-graphql https://elm-graphql.onrender.com --base StarWars --output examples/src
如果需要信头,例如Bearer Token,则 --header 旗帜可以提供.
npx @dillonkearns/elm-graphql https://elm-graphql.onrender.com --base StarWars --output examples/src --header 'headerKey: header value'
学习资源
-
里面有一个完整的教程 页:1
SelectionSet文档。 。 。 .SelectionSets是这个库的核心概念, 所以我建议通过整个页面阅读(时间不长. -
这个
examples/文件夹是另一个很好的开始地 . -
如果你想学习更多的 GraphQL 基础, 这是一个伟大的辅导, 并短读: 图ql.org/learn/ (中文(简体) )
-
我的"精灵之会"2018年演讲进入了背后的哲学
dillonkearns/elm-graphql
(单位:千美元)跳转到 13: 06 直接去到 dillonkearns/elm-graphql 演示).
- 用 Elm 绘制图形QL 初始指南 以 @ martimatix
- 塞缪尔·伍德的精灵图克指南
- Graphqelm: 无可选参数的语言中的可选参数 以 @ martimatix
- Hasura小组的综合辅导
如果你想知道为什么代码是用某种方式生成的, 你很可能在其中找到一个答案 常被问到的问题(FAQ)。 。 。 .
#graphql频道中有一群人非常有帮助 精灵之克不要犹豫 问任何问题 关于开始,最佳做法, 或只是通用 GraphQL在那里!
设置
dillonkearns/elm-graphql 生成允许您建立类型安全GraphQL请求的榆树代码。 这里有设置步骤 dillonkearns/elm-graphql。 。 。 .
-
添加 页:1
dillonkearns/elm-graphql精灵包 作为你elm.json您还需要确保elm/json是您工程的依赖关系 因为生成的代码里面有很多JSON解码器.elm install dillonkearns/elm-graphql elm install elm/json -
安装
@dillonkearns/elm-graphql命令行工具通过 npm。 这是您用来生成 Elm 代码的 API . 建议您保存@dillonkearns/elm-graphql命令行工具作为 dev 依赖, 以便每个人对您的项目使用相同的版本 .npm install --save-dev @dillonkearns/elm-graphql # you can now run it locally using `npx elm-graphql`, # or by calling it through an npm script as in this project's package.json -
运行
@dillonkearns/elm-graphql命令行工具上安装以生成代码。 如果你用这个--save-dev方法上,您可以简单地在您的软件包中创建脚本. json类似如下:{ "name": "star-wars-elm-graphql-project", "version": "1.0.0", "scripts": { "api": "elm-graphql https://elm-graphql.onrender.com/api --base StarWars" } -
上面写着:
package.json运行npm run api将生成dillonkearns/elm-graphql您需要调用代码./src/StarWars/。您现在可以像这里那样使用生成的代码 艾丽的例子 或其中examples文件夹.
订阅支持
您可以使用 GraphQL 订阅和 dillonkearns/elm-graphql。 。 。 .
打开 WebSocket 连接的框架专用 JavaScript 代码中的线
通过一个港口。 这是 现场演示 联 合 国
源代码编辑 演示服务器正在运行 Elixir/ Absinthe。 。 。 .
贡献者
感谢马里奥·马丁内斯马提马提克斯用于 所有反馈,精灵格式的公关,和用于 不可思议的标志设计来啊!
谢谢迈克·斯托克(英语:迈克斯托克用于 陷害崔维斯CI!
谢谢 保留字词拉动请求 @madsflensted(英语:!
非常感谢 @xtian (韩语) 做绝大多数 会 议 日 程 和 议 程 0.19 升级工作塔达:
谢谢 乔什·亚当斯(@knewter) 代码示例 埃利克西尔/阿布辛的订阅通过榆树端口连接!!
谢谢 罗姆里奥 用于添加 OptionalArgument.map来啊!
谢谢 亚伦·怀特 页:1 您的拉动请求以改善性能和
联合国 elm-format 步骤!
路线图
所有核心特性都得到支持。 也就是说,你可以构建任何查询或突变
还有你的 dillonkearns/elm-graphql- 生成代码,并且保证它有效
到您的服务器的策略.
dillonkearns/elm-graphql 将生成代码供您生成订阅
并解码答复,但它不处理低级细节
如何通过网络套接字发送它们。 要做到这一点,你需要使用
自定义代码或知道如何通过websockets(或以
协议),以您特定的框架设置订阅. 见
本次讨论 为什么
这些细节不是由这个图书馆直接处理的.
如果你使用 GraphQL 订阅, 我很乐意听到反馈。 特别是, 我很想看看现场的代码 来推动订阅的任何改进 设计。 请帮我查查Slack 留言 # 图克勒# 频道,或打开一个 Github问题要讨论!
我想调查一下帮手的生成情况 以便更简单 连接(基于 中继光标连接规格) (中文(简体) ). 狦稱硂 chi 此线程。 。 。 .
见 关于特雷洛的完整路线图。 。 。 .

