标签: sangria

在Sangria中编组嵌套的自定义对象

我有以下输入对象:

val BusinessInputType = InputObjectType[BusinessInput]("BusinessInput", List(
    InputField("userId", StringType),
    InputField("name", StringType),
    InputField("address", OptionInputType(StringType)),
    InputField("phonenumber", OptionInputType(StringType)),
    InputField("email", OptionInputType(StringType)),
    InputField("hours", ListInputType(BusinessHoursInputType))

  ))


 val BusinessHoursInputType = InputObjectType[BusinessHoursInput]("hours",  List(
    InputField("weekDay", IntType),
    InputField("startTime", StringType),
    InputField("endTime", StringType)
  ))
Run Code Online (Sandbox Code Playgroud)

以下是定制编组定义的模型:

case class BusinessInput(userId: String, name: String, address: Option[String], phonenumber: Option[String], email: Option[String], hours: Seq[BusinessHoursInput])

object BusinessInput {

  implicit val manual = new FromInput[BusinessInput] {
    val marshaller = CoercedScalaResultMarshaller.default

    def fromResult(node: marshaller.Node) = {
      val ad = node.asInstanceOf[Map[String, Any]]

      System.out.println(ad)
      BusinessInput(
        userId = ad("userId").asInstanceOf[String],
        name = ad("name").asInstanceOf[String],
        address = …
Run Code Online (Sandbox Code Playgroud)

scala playframework sangria

7
推荐指数
1
解决办法
757
查看次数

中继应用:如何在服务器上内省架构?

我正在玩relay-starter-kit.我还使用桑格利亚创建了一个graphql服务器.现在我想把两者连在一起.

在relay-starter-kit中,每次更改模式时,都需要运行脚本来重新生成schema.json文件.但是由于graphql支持模式内省,我想知道是否有一种方法可以配置我的中继应用程序,以便在启动时从服务器内省模式.

有谁知道这是可能的还是解决了怎么做?

facebook reactjs graphql sangria relayjs

6
推荐指数
2
解决办法
2391
查看次数

如何在Sangria GraphQL中的对象的解析器中了解请求的字段

我正在通过Sangria GraphQL(“ org.sangria-graphql” %%“ sangria”%“ 1.0.0-RC5”)构建GrapQL服务器

我不确定通常是否需要它。但是为了提高性能,我想在解决过程中从客户端获取请求的字段。

例如,

如果您要求,

query Query{
  FooObject{
     fieldA
     fieldB
  }
}
Run Code Online (Sandbox Code Playgroud)

您的服务器可能会在FooObject对象解析器中解析

resolve = Ctx => DB.session
  .query("select fieldA, fieldB, FieldC, FieldD from DATA_TABLE")
  .map(entity => DataObject(entity.fieldA, entity.fieldB)  // By ORM Mapper
)
Run Code Online (Sandbox Code Playgroud)

然后,

对象字段可以在FooObject对象的字段解析器中解析

Field("fieldA", type..., resolve = _.fieldA )
Field("fieldB", type..., resolve = _.fieldB )
Field("fieldC", type..., resolve = _.fieldC )
Field("fieldD", type..., resolve = _.fieldD )
Run Code Online (Sandbox Code Playgroud)

然后,您可能会得到graphql结果

{
  data:{
    FooObject:{
      FieldA: "DataA"
      FieldB: "DataB"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是,在对象解析器解析期间,给出如下所示的字段提示。

resolve = Ctx => …
Run Code Online (Sandbox Code Playgroud)

scala graphql sangria

5
推荐指数
1
解决办法
726
查看次数

带有Sangria的GraphQL架构

我正在查看Sangria库,以便在Scala中编写GraphQL服务器.然而,奇怪的是,相同类型的系统必须实现两次:(1)作为GraphQL类型声明的一部分,(2)也在服务器端,作为Scala案例类,伴随ObjectType,InterfaceType等.瓦尔斯.

在Scala中对类型系统进行硬编码尤其令人讨厌,因为我的目的是能够使用任意形状的CRUD聚合,其中每个形状被定义为GraphQL类型集合.例如,假设Shape类型的实例包含GraphQL文档作为字段; 并且Entity类型的实例具有对其Shape的引用,并且还包含在该Shape中定义的形状的Json对象.

case class Shape(id: String, name: String, doc: sangria.ast.Document)
case class Entity(id: String, name: String, shape: Shape, content: JsValue)
Run Code Online (Sandbox Code Playgroud)

例如,如果形状文档是这样的:

type Person {
  firstName: String!
  lastName: String!
  age: Int
}
Run Code Online (Sandbox Code Playgroud)

那么实体中的Json内容可能是这样的:

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 30
}
Run Code Online (Sandbox Code Playgroud)

(一个真实的例子当然也有嵌套类型等)

因此,我试图能够定义Entity类型的实例,其形状在相应的Shape中定义.我不想硬编码相应的sangria.schema.Schema,但想直接从形状文档中派生它.

是否有一种现成的方法可以从包含类型声明的GraphQL文档以编程方式生成GraphQL模式?

json scala graphql sangria

5
推荐指数
1
解决办法
1317
查看次数

单独的graphql/relay后端和前端

我想用继电器将我的后端和我的前端与不同的项目分开.我这样做的原因是因为我正在使用特定的relay/graphql后端,sangria并且希望将前端开发与Scala开发分开.

是否可以在与另一个graphql server后端通信的一台服务器上连接react relay frontend应用程序.似乎到处都有中继假设其端点与endpoint/graphql位于同一主机上

relay reactjs graphql sangria

4
推荐指数
1
解决办法
631
查看次数

为任意JSON创建一个"解码器"

我正在使用Finch,Circe和Sangria为API构建GraphQL端点.将variables通过在GraphQL查询来基本上是任意的JSON对象(假设没有嵌套).例如,在我的测试代码中String,这是两个例子:

val variables = List(
  "{\n  \"foo\": 123\n}",
  "{\n  \"foo\": \"bar\"\n}"
)
Run Code Online (Sandbox Code Playgroud)

Sangria API期望这些类型Map[String, Any].

我已经尝试了很多方法但到目前为止Decoder还没能在Circe 写一个.任何帮助赞赏.

scala finch graphql sangria circe

3
推荐指数
1
解决办法
921
查看次数

如何在sangria-graphql中执行Mutation?

目前,我正在从这里学习sangria-graphql .但是,我找不到Mutation(添加,更新,删除)的任何文档.此外,谷歌不会帮助我.那么,你们能为我提供任何好的资源吗?

scala graphql sangria

2
推荐指数
1
解决办法
1159
查看次数

斯卡拉。Sangria.Print json 架构

我通过 Scala 在 Scala 上使用 GraphQL Sangria。我也正在使用apollo-codegen.

我想定义一次架构,因此我通过以下方式将架构从后端导出到前端:

schema.renderPretty
Run Code Online (Sandbox Code Playgroud)

问题在于桑格利亚汽酒的renderPretty打印模式格式schemaAst。但apollo-codegen需要json格式。

如何制作sangriajson格式的渲染模式?或者也许可以轻松转换schemaAstjsonvia SBT

scala graphql sangria

2
推荐指数
1
解决办法
681
查看次数

对 ObjectType 和 InputObjectType 使用相同的对象

我有一个这样定义的模型对象:

case class OrganizationId(value: Long) extends AnyVal with TypedId

case class OrganizationFields(name: String, iban: Option[String], bic: Option[String])

case class Organization(
  id: OrganizationId, addressId: AddressId, updatedAt: LocalDateTime, insertedAt: LocalDateTime, fields: OrganizationFields
)
Run Code Online (Sandbox Code Playgroud)

这是我在桑格利亚汽酒模式定义中尝试做的事情:

implicit val OrganizationFields = deriveObjectType[GraphqlContext, OrganizationFields]()
  implicit val OrganizationType: ObjectType[GraphqlContext, Organization] = deriveObjectType[GraphqlContext, Organization]()
implicit val OrganizationInputType = deriveInputObjectType[OrganizationFields]()
Run Code Online (Sandbox Code Playgroud)

我需要将OrganizationFields两者定义为ObjectType能够Organization在我的 graphql 查询中使用的 an 以及ObjectInputType能够在我的 graphql 突变中使用它作为输入的 an 。问题是我在运行时遇到以下异常:
Type name 'OrganizationFields' is used for several conflicting GraphQL type kinds: ObjectType, …

scala graphql sangria

0
推荐指数
1
解决办法
1133
查看次数

标签 统计

sangria ×9

graphql ×8

scala ×7

reactjs ×2

circe ×1

facebook ×1

finch ×1

json ×1

playframework ×1

relay ×1

relayjs ×1