首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在带有苦艾酒的GraphQL中表示Elixir/Ecto关联

在带有苦艾酒的GraphQL中表示Elixir/Ecto关联,我们可以通过使用GraphQL的Resolver来实现。

首先,让我们解释一下苦艾酒(Absinthe)是什么。苦艾酒是一个用于Elixir语言的GraphQL解析器,它允许我们定义GraphQL模式和解析器,以便能够在Elixir应用程序中使用GraphQL。

Elixir是一种函数式编程语言,它运行在Erlang虚拟机上,拥有强大的并发能力。Ecto是Elixir的数据库查询和操作框架,它提供了一种优雅的方式来处理数据库操作。

在GraphQL中,关联是指不同数据类型之间的关系。例如,一个博客文章可能有多个评论,这种关系可以表示为一个文章类型和一个评论类型之间的关联。在Elixir/Ecto中,我们可以使用Ecto的关联宏来定义这种关系。

以下是一个示例,展示了如何在带有苦艾酒的GraphQL中表示Elixir/Ecto关联:

  1. 首先,我们需要定义Ecto模型(模式)和它们之间的关联。
代码语言:txt
复制
defmodule MyApp.Post do
  use Ecto.Schema

  schema "posts" do
    field :title, :string
    has_many :comments, MyApp.Comment
  end
end

defmodule MyApp.Comment do
  use Ecto.Schema

  schema "comments" do
    field :content, :string
    belongs_to :post, MyApp.Post
  end
end
  1. 接下来,我们需要定义GraphQL模式和解析器。
代码语言:txt
复制
defmodule MyApp.Schema do
  use Absinthe.Schema

  object :post do
    field :title, :string
    field :comments, list_of(:comment)
  end

  object :comment do
    field :content, :string
    field :post, :post
  end

  query do
    field :posts, list_of(:post) do
      resolve(fn _, _ ->
        MyApp.Repo.all(MyApp.Post)
      end)
    end
  end

  def repo do
    Application.get_env(:my_app, MyApp.Repo)
  end

  def context(ctx) do
    Map.put(ctx, :repo, repo())
  end

  def absinthe_plug(conn, _) do
    Absinthe.Plug.put_options(conn, context: context(conn))
  end
end

在上述代码中,我们定义了两个GraphQL对象类型(post和comment),以及查询字段(posts)。在查询字段的解析器中,我们使用Ecto查询来获取所有的文章。

  1. 最后,我们需要将GraphQL模式与Elixir应用程序的路由器集成起来。
代码语言:txt
复制
defmodule MyApp.Router do
  use MyApp.Web, :router

  forward "/graphql", Absinthe.Plug,
    schema: MyApp.Schema,
    context: %{
      repo: MyApp.Repo
    }
end

在上述代码中,我们将Absinthe.Plug添加到应用程序的路由器中,并将MyApp.Schema和MyApp.Repo传递给它。

现在,我们可以使用GraphQL查询来获取文章及其关联的评论。例如:

代码语言:txt
复制
query {
  posts {
    title
    comments {
      content
    }
  }
}

这将返回所有文章的标题和评论内容。

总结一下,使用带有苦艾酒的GraphQL,我们可以轻松地表示Elixir/Ecto关联。苦艾酒提供了一个强大的工具来定义GraphQL模式和解析器,并且与Elixir的函数式编程风格完美结合。通过将Ecto的关联宏与GraphQL对象类型和查询字段相结合,我们可以构建出一个强大而灵活的GraphQL API。

在腾讯云的产品中,可能会有一些与GraphQL相关的产品或服务,但我无法提供它们的具体信息。建议您访问腾讯云的官方网站或咨询他们的客服,以获取与GraphQL相关的腾讯云产品和服务的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

思考,问题和方法

我们的 Open Chain Access Protocal(OCAP)选用 GraphQL 而非 REST 接口来做 API 层,也有类似的考量。...elixir 的 GraphQL lib) Absinthe 的 GraphQL 的 type notation 定义 Ecto 的 DB repo 定义 Ecto 的 DB schema 定义 Ecto...筹划中,还未开始) 然后在一个 build pipeline 里,生成所有代码。比如生成的 Absinthe 的 query 长这个样子: ?...我们自己写了大约 3500 行 elixir,1000 行 yaml;生成出来 1500 行 elixir 代码(Elixir 支持 Macro,所以我们生成出来这些源码只是方便自己排查问题)。...虽然还有很多问题,但这套系统最大的好处是,在开发过程中,我们可以随意调整 API 的结构而不必每次调整都苦逼修改很多地方的代码。这在我们对很多 API 的行为还没有一个良好定义的时候,是个莫大的福音。

70200

Elixir, OTP, Ecto, 和 Phoenix 免费教程!

从那里开始,我们正在建立一个具有生产力的应用程序,用于持续优质内容。 如果您只想看内容,您可以跳过,否则坚持下去,我们将看看为什么我们投入大量的时间在Elixir生态系统中。 ?...作为Kickstarter的一部分,我们创建了免费的内容来向更多的人介绍Elixir。这是我们在这篇文章末尾宣布的内容。我们也在继续在DailyDrip Elixir主题中建立Firestorm论坛。...Episodes Week 1: 初级Elixir 在第一周,您将学习Elixir编程语言语法及其工具的基础知识,您将学习如何在进程之间发送消息。 我们用自我指导的练习来构建一个独立的过程。...Week 2: 中级Elixir 在第二周,您将学习如何使用ExUnit编写测试,语言本身的更多方面以及如何管理状态。...Week 4: Ecto 在第四周,我们介绍了Ecto,它可以帮助您与数据库进行交互。 我们将开始为论坛建立一个数据模型,我们最终会得到一些非平凡的查询。

1.8K60
  • 如何在Ubuntu上部署Elixir-Phoenix MySQL应用程序

    介绍 在本教程中,您将使用Phoenix-Ecto和Mariaex配置现有的Phoenix应用程序连接到MySQL数据库。Ecto是Phoenix应用程序广泛使用的数据库包装器。...第二步 - 在应用程序中设置Ecto存储库 Phoenix应用程序通过名为Ecto的数据库包装器访问数据库。数据库包装器以项目中的Elixir模块的形式实现。...此外,它必须包含用于初始化在名为init的函数中传递给数据库适配器的选项的代码。 让我们在lib/myproject目录中名为repo.ex的文件中创建模块。...最后,指定Ecto存储库的应用程序配置,以便可以使用Mix任务,如ecto.create和ecto.migrate创建和管理数据库。 在config/config.exs中打开配置文件。...如果您的应用程序由于任何错误而无法编译,Ecto也会拒绝创建数据库。 现在您已将项目设置为连接到数据库,甚至使用Ecto在开发计算机中创建数据库,您可以继续修改服务器上的数据库。

    6.1K20

    ​在群晖docker上装elmlang可视调试编码器ellie

    所以整个ellie源码的语言套语言架构中,源码形式逻辑发布的共有nodejs和elixir和elmlang,其中elmlang负责自身的执行,整个ellie app层次,nodejs源码是后端,负责elmlang...所以它们被做进ellie这个docker编排逻辑中时,需要安排好几种语言的运行时和库支持 -- 在development版本的docker中可以看到清楚的逻辑,前后端各维持在一套dockerfile build...中独立生成image和不同的entrypoint run中运行,而在prod中前后端整合到了elixir image下,它们最大的区别是,dev环境下的webpack需要附加express 8080持续运行...好了,在针对prod的dockerfile和docker-compose.yml作修改之前,先改几个源码中的文件: 配置文件config/prod.exs中的config :ellie, Ellie.Repo.../app 就是没有维持在同一个文件系统中。docker-compose.yml中的volume也会不能生效。

    1.2K60

    金朵希的谜题

    我纪得那件缘色衣服,是因为这位女士把她的苦艾酒洒在上面了。来自拜勒腾的客人穿善一身蓝。...我们先提炼出里面的主要信息: 芬奇-紫衣物正约束 马可拉-最左边正约束,与白衣物邻近(这说明从左数第二个是白衣物正约束) 绿衣在红衣左边(绿衣不可能在最右边负约束) 绿衣苦艾酒正约束...康提丹沃尔正约束 我们将正约束用+放在页面上,负约束用-放在页面上: https://www.pword.net/zebra/#jindosh 这里1、2、3、4、5表示从左到右位置 单击左键设定一个正约束条件...(+),单击右键设置一个负约束条件(-) 再次点击取消约束条件 我们将上面所有约束设定进去后,发现还漏了一些 然后找到5个中存在3个负约束的情况降低难度(说明要么苦艾酒、绿衣服是在最左边,要么是在第四个...): 我们仔细看这两句关于位置信息: 绿衣在红衣左边 考虑到2的位置是白,所以绿衣只可能存在于4的位置,红衣在绿衣的右边,所以是5 钻石旁边达波克瓦、达波克瓦旁边威士忌(需要考虑到钻石持有者同时也可能是威士忌

    1.1K20

    2017,忘掉「全栈」,迎向「一栈」!

    Phoenix 作为一款高性能的 Web 开发框架受到广泛关注。可以遇见,在不就的将来,Elixir + Phoenix 的技术栈就会占据现有 Ruby + Rails 的半壁江山。...Elixir 无论是在语言设计还是运行性能上都优于Ruby,可谓吸收了函数式编程和 Ruby 语言的精髓。...Elixir: 编程语言的未来 2. Erlang 和 Elixir 介绍 3. 从 Go 开发者的角度看 Elixir 的设计思想 4....NodeJS最近异常火爆,其在服务端通常用可以配合Docker来做微服务。但是,使用Elixir你可以不借助外部工具直接部署一整套的微服务,并自带了Docker提供的各种容错分布式重启等功能。...new in Ecto 2.0》-> Phoenix 的数据操作库,like ORM but beyond 资料库持续更新中...

    1.2K70

    如和在几十个 Repo 中游刃有余?

    过去的三个月里,我畅游在 elixir,ansible,terraform,javascript,少量 python,少量 erlang 组成的一群 repo 中,慢慢领悟到了这种高效工作之道:建立属于自己...过去二三十年方兴未艾的互联网革命,上溯到五六十年前一直蓬勃至今的 IT 革命,甚至从第一次工业革命开始,人类社会发展过程中的大部分努力都是在把一切能够自动化的东西自动化。...在 arcblock,我们用来定义 graphql API 的工具是 goldorin(很快会开源),它让我们节省了大量的从 absinthe 到 ecto,再到 slate 的时间,使得我们可以专注于逻辑层的代码...此外,phoenix + absinthe + ecto 做支持 subscription 的 graphql API,需要大量的前置工作 —— 你要写很多基础的配置和脚手架代码,才能让整个系统可用 —...这一切都归功于我们还算不错的 TTP。目前我们的 elixir 项目的 TTP 在十分钟左右,算可以了。

    49520

    继续探索with语句

    在上一篇博客《漂亮的with,鱼与熊掌可以兼得》中,展现了with的优雅之处,然而在比较with与|>时,言犹未尽,讲得不够透彻。...在那篇博客中,我说: 毕竟with/1并不是try/catch,它并不能捕获执行中抛出的错误,然后转向else进行错误处理。只有当模式匹配出现错误时,才会转向else。...因为在Elixir中,函数的定义使用了模式匹配,因此,在定义参与|>操作的函数时,可以通过模式匹配来考虑各种情况,这其中可以包含对{:error, error}情形的处理,使得数据流不至于在流经该函数时因为错误而崩溃掉...Joseph Kain在博客Learning Elixir's with给出了一个例子,执行了ecto查询: defp results(conn, search_params) do conn.assigns.current_user...如果使用with,虽然结构不如|>清晰直观,却可以避免在all与preload中去处理错误分支。

    72670

    OpenTelemetry ErlangElixir、Javascript和Ruby发布v1.0

    Erlang/Elixir 如果你的应用程序使用 Erlang 或 Elixir,OpenTelemetry 现在提供了一个完整的解决方案来收集、丰富和发送分布式跟踪到各种遥测后端。...许多与 Erlang 和 Elixir 库的集成,如 Phoenix 和 Ecto,也可以在 hex.pm 中的 OpenTelemetry 组织[5]和 GitHub 的contrib 仓库[6]中找到...在SDK 仓库[15]中可以找到官方的OTLP 导出器[16]和一小部分官方工具。contrib 仓库[17]提供了一个丰富的工具插件、资源检测器等生态系统。...我们的下一个优先事项包括稳定 API 和 SDK 的指标,继续添加到已经丰富的工具和其他插件生态系统中,并改进我们的文档和新的用户体验。...Ruby 虽然 OpenTelemetry Ruby 最近才宣布其 1.0 版本,但贡献者社区已经在行业中一些最大的 Ruby组织[22]的生产环境中对其进行了一年多的强化。

    73320

    如何在Ubuntu 16.04上使用Distillery和edeliver自动化Elixir-Phoenix部署

    在本教程中,您将在本地开发机器和生产服务器上安装Erlang,Elixir和Phoenix 1.3,您将简化两个位置之间的SSH通信,然后您将创建一个示例Phoenix项目来构建和使用edeliver进行部署...第1步 - 在本地开发机器上安装Elixir和Phoenix 因为Elixir在Erlang VM上运行,所以我们需要先安装VM才能安装Elixir。...第一次在本地开发机器上编译基于Elixir的应用程序时,系统会提示您安装Rebar,这是Mix依赖的Erlang的构建和依赖工具。在提示符下输入Y。...该块告诉Distillery我们希望它如何构建自包含的生产发布包。include_erts表示我们是否要捆绑Erlang运行时系统,这在目标系统没有安装Erlang或Elixir时很有用。...现在,设置Git应该与此存储库关联的标识。这将帮助您跟踪项目的更改来自何处。

    4.3K00

    如何将Web主页性能提升十倍以上?

    这里再介绍一点我们的情况:我们的主页由 React(TypeScript)、Phoenix(Elixir)、Puppeteer(headless Chrome)以及 GraphQL API(Ruby on...Elixir 采用 Actor 并发模型。每个“Actor”(即 Elixir 进程)的内存占用量都非常有限,仅为 1 到 2 KB。这意味着系统将能够同时运行成千上万个独立的进程。...Phoenix 则是一套 Elixir Web 框架,能够支持高吞吐量,并允许开发者在各个独立的 Exlixir 进程当中处理各项 HTTP 请求。...拆分那些在页面中无法立即显示的部分,例如弹出框以及页面下方的页脚。 Polyfills 与 ponyfills 可支持全部主流浏览器当中的各最新浏览器功能。...带有 link 标签的资源提示 Preload 会在当前页面实际使用之前,通过后台预先下载高优先级资源。

    3.9K40

    如何使用一门新的语言

    在上一篇文章中,通过新的 Policy Engine,我已经证明了这样的思路在 javascript / nodejs 下无法实现。...我的做法是在项目的根目录下放一个 version 文件,然后各种地方都从这个文件中读取 version 信息。在代码中读取很简单,自不必说: File.cwd!...elixir 目前还不支持 http/2(主要是 cowboy 2.0 还在 pre-release 阶段),所以 rest API / GraphQL 都是互联互通的优先选择。...在 ansible 脚本中,我为我的服务生成了 systemd 的配置文件。这样,服务的重启的接口就很统一了。...错误报告系统一般用 sentry,对于我们而言,sentry 官方有 elixir 的客户端,只要注册一个新的 app,把 dsn 写入到配置文件中即可实现和错误报系统的集成。很简单。

    96860

    GraphQL详解

    总结它的好处: 在它的设计思想中,GraphQL 以图的形式将整个 Web 服务中的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...通过对象模型来构建GraphQL中关于一个数据模型的形状,同时还可以声明各个模型之间的内在关联(一对多、一对一或多对多)。 对象类型的定义可以参考下图: 对象模型引入关联关系 是不是很方便呢?...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...: 正确的表示 其他类型 除了上面的,Graphql还有一些其他类型来更好的引入面向对象的设计思想: 接口类型(Interfaces):其他对象类型实现接口必须包含接口所有的字段,并具有相同的类型修饰符...Julia Swift / Objective-C iOS Python R 覆盖了众多客户端设计语言,而其他语言的支持也在推进中。

    2.6K00

    我为什么要放弃RESTful,选择拥抱GraphQL

    总结它的好处: 在它的设计思想中,GraphQL 以图的形式将整个 Web 服务中的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...通过对象模型来构建GraphQL中关于一个数据模型的形状,同时还可以声明各个模型之间的内在关联(一对多、一对一或多对多)。 对象类型的定义可以参考下图: 对象模型引入关联关系 是不是很方便呢?...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...: 正确的表示 其他类型 除了上面的,Graphql还有一些其他类型来更好的引入面向对象的设计思想: 接口类型(Interfaces):其他对象类型实现接口必须包含接口所有的字段,并具有相同的类型修饰符...Julia Swift / Objective-C iOS Python R 覆盖了众多客户端设计语言,而其他语言的支持也在推进中。

    2.4K40

    GraphQL 在微服务架构中的实践

    这篇文章中,首先会简单介绍 GraphQL 是什么,它能够解决的问题;在这之后,我们会重点分析 GraphQL 在微服务架构中的使用以及在实践过程中遇到的棘手问题,在最后作者将给出心中合理的 GraphQL...为了能够更好的表示非空和空字段,GraphQL 也引入了 Non-Null 等标识代表非空的类型,例如 String! 表示非空的字符串。 ?...以及 Protobuf 就没有官方版本的 Elixir 实现,虽然有一些开源项目作者完成的项目,但是都并不稳定,所以最终决定了在 RabbitMQ 上简单实现了一个基于消息队列的 RPC 框架,并通过组合的方式对外提供...经过评估之后,我们决定在 GraphQL Elixir 实现 Absinthe 上进行一层包装,并对客户端的请求进行语法与语义的解析,将字段对应的树包装成子查询发送给下游的服务,最终再由最前面的 GraphQL...在这种 Schema 管理去中心化的架构中,我们遇到了两个比较重要的问题: 用于 Schema Stitching 的组件对于 Elixir 语言并没有官方或者大型开源项目的支持,手搓的组件在承载较大的服务负载时会有很大的压力

    1.5K10

    GraphQL

    总结它的好处: 在它的设计思想中,GraphQL 以图的形式将整个 Web 服务中的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...通过对象模型来构建GraphQL中关于一个数据模型的形状,同时还可以声明各个模型之间的内在关联(一对多、一对一或多对多)。 对象类型的定义可以参考下图: 对象模型引入关联关系 是不是很方便呢?...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...: 正确的表示 其他类型 除了上面的,Graphql还有一些其他类型来更好的引入面向对象的设计思想: 接口类型(Interfaces):其他对象类型实现接口必须包含接口所有的字段,并具有相同的类型修饰符...Julia Swift / Objective-C iOS Python R 覆盖了众多客户端设计语言,而其他语言的支持也在推进中。

    2.6K65

    GraphQL 在微服务架构中的实践

    这篇文章中,首先会简单介绍 GraphQL 是什么,它能够解决的问题;在这之后,我们会重点分析 GraphQL 在微服务架构中的使用以及在实践过程中遇到的棘手问题,在最后作者将给出心中合理的 GraphQL...为了能够更好的表示非空和空字段,GraphQL 也引入了 Non-Null 等标识代表非空的类型,例如 String! 表示非空的字符串。...在这种 Schema 管理去中心化的架构中,我们遇到了两个比较重要的问题: 用于 Schema Stitching 的组件对于 Elixir 语言并没有官方或者大型开源项目的支持,手搓的组件在承载较大的服务负载时会有很大的压力...为了能够更好的表示非空和空字段,GraphQL 也引入了 Non-Null 等标识代表非空的类型,例如 String! 表示非空的字符串。...在这种 Schema 管理去中心化的架构中,我们遇到了两个比较重要的问题: 用于 Schema Stitching 的组件对于 Elixir 语言并没有官方或者大型开源项目的支持,手搓的组件在承载较大的服务负载时会有很大的压力

    2.7K20

    什么是GraphQL?【Programming】

    查询语言 Graphql 作为一种查询语言似乎是合理的——“ QL”似乎非常重要,因此名字中也有它的名字。 但我们在质疑什么呢? 查看样例查询请求和相应的响应可能会有所帮助。...客户机可以通过用户查询请求用户的任何字段,而GraphQL服务器将在其响应中只返回这些字段。通过使用强类型模式,GraphQL服务器可以验证传入的查询,以确保它们基于已定义的模式是有效的。...(args.id).then( userData => new User(userData) ) } } 虽然上面的例子是在JavaScript中,但是GraphQL服务器可以用任意数量的语言编写...而且,GraphQL服务器实现已经跨越了许多编程语言,不仅仅是人们期望的JavaScript、Java和c#,还有像Go、Elixir和Haskell这样的语言。...由于GraphQL提供了抽象,因此系统团队可以进行这些更改,同时继续在GraphQLAPI级别上遵守GraphQL的“合同”。

    90500

    这才是GraphQL最详细的解释

    查询语言 GraphQL 作为一种查询语言似乎是合理的 —— 毕竟其中包含了“QL”这个字眼。但是我们在查询什么呢?下面关于查询请求和对应的响应的例子可能会对你的理解有所帮助。...,然后获取结果并显示在屏幕上。...客户端可以通过 user 查询请求 user 的所有字段,GraphQL 服务器在响应中仅返回那些字段。...并且已经有了基于多种编程语言的 GraphQL 服务器实现,不仅仅是人们通常认为的 JavaScript、Java 和 C#,还有 Go、Elixir 和 Haskell 等语言。...由于 GraphQL 提供的抽象能力,系统团队可以在继续遵守 GraphQL API 级别的规范的前提下进行这些改进。 由于 GraphQL 相对较新,开发人员仍在不断的寻找更好的使用它的方案。

    96530

    GraphQL+Koa2实现服务端API结合Apollo+Vue

    GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且 没有任何冗余。...从这个意义上说,它是数据库无关的, 而且可以在使用 API 的任何环境中有效使用,我们可以理解为 GraphQL 是基于 API 之上的一 层封装,目的是为了更好,更灵活的适用于业务的需求变化 GraphQL...尤其是在业务多变的场景中,很难在保证工程质量的同时快速满足业务需求 GraphQL 的优点 吸收了 RESTful API 的特性 所见即所得 各种不同的前端框架和平台可以指定自己需要的字段。...将它与vue-apollo和graphql一起安装: npm install vue-apollo graphql apollo-boost --save 在src/main.js中引入apollo-boost...',     apolloProvider,     render:h=>h(App) }) 简单查询 组件加载的时候就会去服务器请求数据,请求的数据会放在navList这个属性上面,在模板中可以直接使用当前属性

    5.2K42
    领券