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

Clojure:如何以edn格式在lacinia Graphql模式中添加标量类型?

Clojure是一种函数式编程语言,它运行在Java虚拟机上,并且具有强大的并发处理能力和可扩展性。在Clojure中,可以使用edn格式(Extensible Data Notation)来表示数据,并且可以通过lacinia库将edn格式的数据添加到GraphQL模式中作为标量类型。

要在lacinia GraphQL模式中添加标量类型,可以按照以下步骤进行操作:

  1. 首先,确保已经在Clojure项目中引入了lacinia库的依赖。可以在项目的project.clj文件中添加以下依赖:
代码语言:txt
复制
[lacinia "0.33.0"]
  1. 创建一个Clojure命名空间,并导入所需的lacinia库:
代码语言:txt
复制
(ns my-namespace
  (:require [lacinia.schema :as schema]
            [lacinia.edn :as edn]))
  1. 定义一个edn格式的标量类型。可以使用schema/scalar-type函数来创建标量类型,并指定其名称、解析器和序列化器。例如,创建一个名为DateTime的标量类型:
代码语言:txt
复制
(def DateTime (schema/scalar-type
                {:name "DateTime"
                 :coercer (fn [value]
                            (if (string? value)
                              (java.time.LocalDateTime/parse value)
                              (throw (ex-info "Invalid DateTime format" {:value value}))))
                 :serializer (fn [value]
                               (if (java.time.LocalDateTime? value)
                                 (str value)
                                 (throw (ex-info "Invalid DateTime value" {:value value}))))}))

在上述示例中,我们使用了Java 8的java.time.LocalDateTime类来处理日期和时间。

  1. 将标量类型添加到GraphQL模式中。可以使用schema/extend函数来扩展现有的GraphQL模式,并添加新的标量类型。例如,将DateTime标量类型添加到现有的模式中:
代码语言:txt
复制
(def extended-schema (schema/extend schema/default-schema
                       {:scalars {"DateTime" DateTime}}))

在上述示例中,我们使用了schema/default-schema函数来获取默认的GraphQL模式,并通过schema/extend函数将DateTime标量类型添加到模式中。

  1. 将edn格式的数据转换为GraphQL查询。可以使用edn/to-query函数将edn格式的数据转换为GraphQL查询字符串。例如,将以下edn格式的数据转换为GraphQL查询:
代码语言:txt
复制
(def edn-data {:query [:user {:id 1} [:name :email :created-at]]})
(def graphql-query (edn/to-query extended-schema edn-data))

在上述示例中,我们使用了edn/to-query函数将edn-data转换为GraphQL查询字符串,并使用extended-schema作为模式。

通过以上步骤,我们可以在lacinia GraphQL模式中成功添加edn格式的标量类型,并将edn格式的数据转换为GraphQL查询。请注意,以上示例仅为演示目的,实际使用时可能需要根据具体需求进行调整。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,建议您参考腾讯云的官方文档和产品介绍页面,以获取与Clojure和GraphQL相关的云计算解决方案和服务。

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

相关·内容

GraphQL详解

总结它的好处: 它的设计思想GraphQL 以图的形式将整个 Web 服务的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...GraphQL的Type简单可以分为两种,一种叫做Scalar Type(标量类型),另一种叫做Object Type(对象类型)。 那么就分别来介绍下两种类型。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...其中内建标量主要有: String Int Float Boolean Enum ID Scalar Type 上面的类型仅仅是GraphQL默认内置的类型,当然,为了保证最大的灵活性,GraphQL还可以很灵活的自行创建标量类型...描述数据模型(模式Schema)时,就可以对字段施加限制条件。

2.6K00
  • GraphQL

    REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构设计模式。...总结它的好处: 它的设计思想GraphQL 以图的形式将整个 Web 服务的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...其中内建标量主要有: String Int Float Boolean Enum ID Scalar Type 上面的类型仅仅是GraphQL默认内置的类型,当然,为了保证最大的灵活性,GraphQL还可以很灵活的自行创建标量类型...描述数据模型(模式Schema)时,就可以对字段施加限制条件。

    2.6K65

    为什么我劝你放弃了Restful API?

    REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构设计模式。...总结它的好处: 它的设计思想GraphQL 以图的形式将整个 Web 服务的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...其中内建标量主要有: String Int Float Boolean Enum ID 上面的类型仅仅是GraphQL默认内置的类型,当然,为了保证最大的灵活性,GraphQL还可以很灵活的自行创建标量类型...描述数据模型(模式Schema)时,就可以对字段施加限制条件。

    2.9K20

    GraphQL 从入门到实践

    传统的 API 拿到的是前后端约定好的数据格式GraphQL 对 API 的数据提供了一套易于理解的完整描述,客户端能够准确地获得它需要的数据,没有任何冗余,也让 API 更容易地随着时间推移而演进...对象类型:用户 schema 定义的 type 标量类型GraphQL 内置有一些标量类型 String、Int、Float、Boolean、ID,用户也可以定义自己的标量类型 比如在 Schema...一些常用的解决方案 Apollo 可以帮省略一些简单的解析函数,比如一个字段没有提供对应的解析函数时,会从上层返回对象读取和返回与这个字段同名的属性。...query { me { name } } Get 是将请求内容放在 URL ,Post 是 content-type: application/json 情况下,将 JSON 格式的内容放在请求体里...3.2 Query 首先我们来试试 hello world,我们 schema.graphql 写上 Query 的一个入口 hello,它接受 String 类型的返回值 # src/schema.graphql

    2.5K31

    GraphQL入门之自定义标量类型

    GraphQL 默认支持五种标量类型:Int,Float,String,Boolean 和 ID,可以满足大部分的使用场景,但有时候需要一些特殊的属性类型,此时我们就可以使用自定义标量类型来实现。...下面看一下怎么通过自定义标量类型来实现一个 DateTime 类型。...} schema { query: Query mutation: Mutation } schema 文件主要包括: 定义了一个标量类型 DateTime 在用户对象添加了一个标量类型的属性...registerDateTime 查询操作的时候按用户 registerDateTime 来查找 变更操作的时候添加了一个 registerDateTime 的标量类型 实现处理器 创建 resolvers.js...其中定义了三个方法: serialize: 定义了后端对象类型转json格式值的方法 parseValue: 定义了json格式值转后端对象类型的方法 parseLiteral: 当传入的查询字符串包含标量作为硬编码的参数值时

    11910

    GraphQL语法用于模式验证和代码生成的新方法

    GraphQL是一种有效负载描述语言,它解决了单一领域特定语言中使用验证规则和消息模式定义有效负载的问题。该语言包括一个基于graphql类型系统,就像任何接口定义语言一样。...这个类型系统支持标量、对象、枚举以及这些类型值的基本验证。我们使用这个类型系统来定义有效载荷和自定义验证规则(例如数据格式、允许值范围、正则表达式匹配和必需属性)。...消息契约只是基于有效负载类型的消息模式定义。定义消息契约时,可以根据有效负载类型选择消息契约包含哪些字段。...Nav开发团队:我们当前的体系结构,不需要使用冗余的异步工具,AsyncAPI。 AsyncAPI可以有任何消息有效负载,因此NSA生成的输出可以用作AsyncAPI消息模式。...InfoQ:GraphQL模式是存储单独的repos,还是存储在生产者或消费者? Nav开发团队:GraphQL模式当前存储与处理器和随后生成的代码相同的存储库

    20210

    GraphQL与OpenAPI:数据治理的优缺点

    关系使用 Schema Definition Language (SDL) 指定,其中包括其类型系统标量、枚举、接口和联合。...GraphQL GraphQL设计为可扩展的,并具有自定义指令、自定义标量和可扩展类型之类的功能。指令会修改操作的行为。...自定义标量可以表示巨大数字、日期或特定用例(科学计算)的地理解析坐标等概念。 OpenAPI OpenAPI 基于约定且可扩展性有限。...你必须通过创建标注为 x- 类型的自定义字段,将自定义元数据添加到 OpenAPI 规范。此约定有效地指示任何标准工具忽略这些字段。...由于其专业化重点,GraphQL 可以提供以多种语言实现的参考库。这些库解析 GraphQL 模式和查询并将它们连接到代码,从而促进数据库和业务逻辑集成到响应

    10810

    30分钟理解GraphQL核心概念

    我们使用REST接口时,接口返回的数据格式、数据类型都是后端预先定义好的,如果返回的数据格式并不是调用者所期望的,作为前端的我们可以通过以下两种方式来解决问题: 和后端沟通,改接口(更改数据源) 自己做一些适配工作...值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...只不过GraphQL,我们用Query来描述资源的获取方式。...获取解析数据,第一层解析完毕 之后对第一层解析的返回值,进行第二层解析,当前articles还包含三个子Query,分别是id、author和comments idAuthor类型标量类型,解析结束

    2K40

    30分钟理解GraphQL核心概念

    我们使用REST接口时,接口返回的数据格式、数据类型都是后端预先定义好的,如果返回的数据格式并不是调用者所期望的,作为前端的我们可以通过以下两种方式来解决问题: 和后端沟通,改接口(更改数据源) 自己做一些适配工作...值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...只不过GraphQL,我们用Query来描述资源的获取方式。...获取解析数据,第一层解析完毕 之后对第一层解析的返回值,进行第二层解析,当前articles还包含三个子Query,分别是id、author和comments idAuthor类型标量类型,解析结束

    98620

    新一代数据查询语言GraphQL来啦!

    GraphQL是一种API查询语言,是一个对自定义类型系统执行查询的服务端运行环境 一个GraphQL查询是一个被发往服务端的字符串,该查询服务端被解释和执行后返回JSON数据给客户端。...GraphQL服务通过定义类型和属性来创建,然后为在这些类型上的每个属性创建函数。跟SQL类似,这使得GraphQL执行查询之前可以提供描述性的错误信息。...的类型系统分为标量类型(Scalar Types,标量类型)和其他高级数据类型标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript的原始类型对应。...GraphQL 规范目前规定支持的标量类型有: Int : 整数,对应JavaScript的Number Float:浮点数,对应JavaScript的Number String:字符串,对应Javascript...当你添加新的产品功能时,额外的字段可以被添加到服务,同时并不会影响到现有的业务;当你淘汰老功能的时候,遗弃对应的服务字段依旧可以继续工作。这种渐进式、向后兼容的过程去除了递增版本号的需要。

    3K70

    新一代数据查询语言GraphQL来啦!

    GraphQL是一种API查询语言,是一个对自定义类型系统执行查询的服务端运行环境 一个GraphQL查询是一个被发往服务端的字符串,该查询服务端被解释和执行后返回JSON数据给客户端。...GraphQL服务通过定义类型和属性来创建,然后为在这些类型上的每个属性创建函数。跟SQL类似,这使得GraphQL执行查询之前可以提供描述性的错误信息。...的类型系统分为标量类型(Scalar Types,标量类型)和其他高级数据类型标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript的原始类型对应。...GraphQL 规范目前规定支持的标量类型有: Int : 整数,对应JavaScript的Number Float:浮点数,对应JavaScript的Number String:字符串,对应Javascript...当你添加新的产品功能时,额外的字段可以被添加到服务,同时并不会影响到现有的业务;当你淘汰老功能的时候,遗弃对应的服务字段依旧可以继续工作。这种渐进式、向后兼容的过程去除了递增版本号的需要。

    90830

    Spring Boot GraphQL 实战 02_增删改查和自定义标量

    } 同理,我们也需求 BookGraphQLMutationResolver 添加对应的方法来映射。...mutation和input 自定义标量类型 GraphQL 自带一些默认标量类型: Int:有符号 32 位整数 Float:有符号双精度浮点值 String:UTF‐8 字符序列 Boolean...:true 或者 false ID:ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存的键。...ID 类型使用和 String 一样的方式序列化 使用 graphql-java-extended-scalars 库 Java 这个生态,我们可以引入下面这个库来帮助我们很方便的进行扩展: https... graphql-java-extended-scalars 具体扩展了哪些标量类型,我们都可以 graphql.scalars.ExtendedScalars 类中找到

    2.2K20

    GraphQL 初体验,Node.js 构建 GraphQL API 指南

    传统的基于 REST 的 API 方法,客户端发出请求,而服务端决定响应。 但是 GraphQL ,客户端可以精确地确定其从服务器获取的数据。...如果你的应用程序不断增大,你会发现自己在你的架构添加了更多的存储结构 -- PostgreSQL 可能是存储用户信息的好地方,而 Redis 可能是存储其他种类信息的好地方 -- 对 GraphQL...(顺便说一下,GraphQL 模式不仅有对象,字段和标量类型,还有更多,你也可以合并接口,联合和参数以构建更复杂的模型,但本文中不会介绍)。...但这个缺点也是积极的:通过仔细设计你的 Graphql Schema,你可以避免更容易实现(也更容易破坏)的 REST 端点中明显的陷阱,命名的不一致和混乱的关系。...解析器执行验证检查是很有诱惑力的,但随着模式的增长,这将成为一种难以维持的策略。 GraphQL 什么时候不合适? GraphQL 不能像 REST 一样精确地满足 HTTP 通信的需求。

    8.3K40

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

    ,错误的数据类型可能会导致网站出错 尤其是在业务多变的场景,很难保证工程质量的同时快速满足业务需求 GraphQL 的优点 吸收了 RESTful API 的特性 所见即所得 各种不同的前端框架和平台可以指定自己需要的字段...但 GraphQL 提供了强类型的 schema 机制,从而天然确保了参数类型的合法性 二、GraphQl类型系统 2.1 GraphQl类型 可以将GraphQL类型系统分为标量类型(ScalarTypes...,标量类型)和其他高级数据类型标量类型即可以表示最细粒度数据结构的数据类型,可以和JavaScript的原始类型对应 GraphQL规范目前规定支持的标量类型有 Int:有符号32位整数 -- GraphQLInt...GraphQL其他高级数据类型包括 Object:对象(newGraphQLObjectType) 用于描述层级或者树形数据结构。对于树形数据结构来说,叶子字段的类型都是标量数据类型。...将它与vue-apollo和graphql一起安装: npm install vue-apollo graphql apollo-boost --save src/main.js引入apollo-boost

    5.2K42

    防止你的GraphQL API被恶意查询

    例如,Spectrum的GraphQL API,我们有这样的关系: type Thread {   messages(first: Int, after: String): [Message] }...虽然在其他应用层有一些缓解措施使开始发送查询变得困难(CORS),但它们无法完全防止发生。 大小限制 我们考虑的第一种天真的方法是通过原始字节来限制传入查询的大小。 ...我们检查了我们的客户端,我们使用的最深的查询有7个级别,所以我们使用了(相当宽松的)最大深度为10的值,并将其添加到我们的验证规则: app.use('/api', graphqlServer({   ...(尽管DataLoader可能会缓解数据库压力,但网络和处理压力不会) 我们没有将第一个参数的类型设置为Int(允许任意数量),而是使用graphql-input-number创建了一个自定义标量,该标量将最大值限制为...运行上面的evilQuery,现在我们添加graphql-cost-analysis,我收到一条错误消息,告诉我“GraphQL查询超过最大复杂度,请删除一些嵌套或字段,然后重试。

    1.8K10

    API接口架构REST vs GraphQL

    与 REST 不同,GraphQL 需要一个模式来告诉客户端和服务器通过 API 允许哪些数据和操作。这些是用 GraphQL 模式语言定义的,它是一种与语言无关的具有强大的类型系统的格式。...我们的 GraphQL 模式,我们将定义Article类型,该类型具有必需的整数id字段和用于title、image和可选字符串字段description,如下所示: type Article {...title: String image: String description: String } 除了基本的标量类型之外,模式对象还可以相互引用。...这可以包括特定字段,甚至嵌套对象。我们之前看到必须在模式上定义操作。但是,在这些操作,我们可以指定我们希望查询返回到模式限制的哪些字段。...请注意, GraphQL 响应接收到的数据将与请求它的查询具有相同的结构。

    1.6K30

    GraphQL 基础实践

    同时 GraphQL 标量字段是粒度最细的一个数据单元了,同时作为返回 JSON 响应数据的最后一个字段。也就是说,如果是一个 Object,还必须选择至少其中的一个字段。 ?...中一个对象可以包含各种 key, GraphQL ,type 里面同样可以包含各种字段(field),而且字段类型不仅仅可以是标量类型,还可以是 Schema 定义的其他 type。... GraphQL ,有如下几种标量类型:Int, Float, String, Boolean, ID ,分别表示整型、浮点型、字符串、布尔型以及一个ID类型。...同时这些标量类型可以理解为 JavaScript 的原始类型,上面的标量类型同样可以对应 JavaScript 的 Number, Number, String, Boolean, Symbol 。...如果我们的某个字段返回不止一个标量类型的数据,而是一组,则需要使用List类型声明,标量类型两边使用括号[]包围即可,与 JavaScript 数组的写法相同,而且返回的数据也将会是数组类型

    12.8K20

    使用 React 和 GraphQL 做一个todo list

    这背后的原因是每次我们都启动服务,在内存存储的Todo(s)数组变为空了。我们将在下面的内容展示如何向数组添加数据。 如你所见,返回的格式已经被替换成了客户端已经定义和描述过了的查询格式。...应该该类型的语法(schema)的查询 。 需要创建一个匹配代码基层的GraphQL 类型语法(schema)。接下来的代码,我们定义一个简单的语法(schema)。...任何以/graphql结尾的POST请求 将会与我们的GraphQL语法(schema)发生执行冲突。...这种接收异常类型的操作,GraphQL中被 称作修改(mutations),定义一个修改(mutations)跟定义一个查询一样,也会返回一个类型的的值。...在这个快速的修改(mutation)的介绍之后,我们可以最终服务端添加一个todo 。

    2K130
    领券