GraphQL API 参数问题 - Elixir

GraphQL API Parameters issue - Elixir

我需要在应用程序中 post 发表评论。这已经实施并且工作正常。现在,我有一个额外的要求,即上传照片和评论。所以,我在应用程序中实现了相机功能,现在我将图像 URI 发送到 GraphQL API。我重构了 elixir 中的架构和类型。但是,不知何故,参数在到达服务 class.

时消失了

comment.ex

defmodule MyApp.Comment do
  use MyApp.Schema

  schema "comments" do
    field :art_id    , :string
    field :body      , :string
    field :image_url   , :string
    field :image_name  , :string

    belongs_to :user , User
    timestamps()
  end

  @optional_attributes ~w(body art_id image_url image_name)a

  def changeset(%Comment{} = schema, params) do
    schema
    |> cast(params, @optional_attributes)
    |> validate_required(@required_attributes)
  end
end

schema.ex 包含:

 field :create_comment, :comment do
      arg :art_id, non_null(:string)
      arg :base64_image, :string
      arg :image_name, :string
      arg :body, :string

      middleware RequireAuth
      resolve &CommentService.create_comment/2
      middleware HandleErrors
 end

types.ex

object :comment do
    field :id     , :id
    field :art_id , :string
    field :body   , :string
    field :image_name  , :string
    field :image_url   , :image_url
    field :user   , :user do
      resolve &UserResolver.resolve/2
    end
  end

scalar :image_url, description: "S3 image url" do
    serialize fn(arg) ->
      {:ok, url} = MyApp.FileService.get_object_url(Application.get_env(:ex_aws, :bucket), arg)
      url
    end
  end

在我的本地服务器日志上:

[info] POST /api/graphql
[debug] QUERY OK source="users" db=1.6ms
SELECT u0."id", u0."email", u0."fb_id", u0."full_name", u0."avatar_url", u0."password_digest", u0."email_confirmed_at", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."id" = ) [1]
[debug] ABSINTHE schema=MyApp.API.Schema variables=%{"artId" => "comma-2005-06", "base64Image" => "data:image/jpeg;base64,/9j/4QMMRXhpZgAASUkqAAgAAAA3ADIBAgAUAAAAogIAAA8BAgAKAAAAtgIAAAEBAwABAAAAIAoAABABAgAIAAAAwAIAAAmSAwABAAAAEAAAAAiSAwABAAAAAAAAAAqkAwABAAAAAQAAAAikAwABAAAAAAAAAAmkAwABAAAAAAAAAAABAwABAAAAmAcAABIBAwABAAAAAAAAAAeSAwABAAAA/////yWIBAABAAAAyAIAAGmHBAABAAAA5gIAAAAAAABBd0FCQUFBQUFBQUFBQUFCQXdBQkFBQUFtQWNBQUJJQkF3QUJBQUFBQUFBQUFBZVNBd0FCQUFBQS8vLy8veVdJQkFBQkFBQUE3QUlBQUdtSEJBQUJBQUFBQ2dNQUFBQUFBQUJCUVVGQ1FYZEJRa0ZCUVVGdFFXTkJRVUpKUWtGM1FVSkJRVUZCUVVGQlFVRkJaVk5CZDBGQ1FVRkJRUzh2THk4dmVWZEpRa0ZCUWtGQlFVRTNRVWxCUVVkdFNFSkJRVUpCUVVGQlEyZE5RVUZCUVVGQlFVSkNVVlZHUTFGWVpFSlJhMFpDVVZWR2RGRlhUa0pSVlVwS1VXdEdNMUZWU2tKUlZVWkNVVlZHUWxGVlJrSmFWazVDWkRCR1ExRlZSa0pSVXpoMlRIazRkbVZXWkVwUmEwWkNVV3RHUWxGVlJUTlJWV3hDVVZWa2RGTkZTa0pSVlVwQ1VWVkdRbEV5WkU1UlZVWkNVVlZHUWxGVlVsZGtWa1pDVVZWR1FsRXdiR3RsVlRnd1VWVkdRbEZWUmtSUmJsbDRXVzEwUWxGVlJrSlJVM1JLWlZkNE1WVlZSa0pSVlVaRVRrVTVNRlo2VmtKUlZVWkNVVlU1UkdSRWFIbFpNRVpDVVZWR1FtUXdhRkZUTTFaU1VWVkcyMDE4OjA5OjEzIDEzOjI3OjU4AE1vdG9yb2xhAABYVDEwMzMAAAIAAAAAAFVraHdWMlJXUmtKUlZVWkNVVzA1UWxKWAIAAQIEAAEAAAAEAwAAAgIEAAEAAAAAAAAAAAAAAP/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/AABEICiAHmAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APcLa1klu0w5KryRk1rPaK8e3IPHpUNpGIySARnpnrVxM+vWsUF+qMoaagmY7ckD9KcRtYgjkehrUIC5JwB25qnNtDblxnHUGmFyKIlVIX8aeuSc7jRtzinoSgIwKBXLNtIixbWAOfamyOEPHeokB6kUlwVWEux4FAiSbyfL3bxuPQ5/Soy3GM/jWbLOqo0jvtUdSTVYagzsQjEsTge9A0jUeVFnwoB4+8PWrSanbrJl8rxWeIWTJOB681S1lwsDoq7s4yfSgV7FfVdUF3fGW2un8pRwqngjNWbO6ubmQCOOQlQPm2kgVzUTWtkpaWUKFPU+/at/wrq989tJ5UUYtw/yNklmPcH0HpQTeysT6jqS/aUtrqYA4yAv+NYt6bK6vYkiRVcD5Gc4ye9WtPk0uyupb7VZfmJLYPzDr6Vj3982u6uf7Nt/s8UY8sykYO3sQKBppEPjDUotKvYmvb5pI9oIQtk/Sm+IfEltqemx2mjRqshUZlMfU46DPrzXE6rai28QrFrt817hgThj868ds8V2Hh6KK/MT6Pbl4j8sZCkAD8enemkJaaFO+8M6rDoEVxdaw7Ip8zyA3C+3vXMT6naWEZjt1V5TyechT6n1ru/Fj31pYJb3e1bfvyPlz34rz/xhP4b0zQkjtYIri/Y/IYj949eT+I96d+5Wm1i74F0uTUr5726uxFCpKj5wGY+o+nT8aj8T69ovhfV2tcyTbR83R8Z989q4zw1qniuO5ebT4VigZvL2Sp0zySM/zqWN9KjvXutbjLGNOFYk4OfTPzfShpoqcHzWTuT+L/EMniG6it7OHyVBBEmNvmE4646V0OkaBHDC7apdRsCu0qMAEdB16iuLvtX0+71V4NF0+YsRxtXHmHuf9kdvwqzc2l2xRNR3PsIAUngD047UaoTjZ7WPQr2/0zStOBdFWB1ICx8kj2FcL4nuLfULZlVm8tX3hd+P5Vb8SsE0wkneyLlvlJ6e1ee3c2oz2zOFKRN0bJH/AOqkTfQ6Xwxqek2Qla7hEssfMbdSD6cnv71hy3Nzq2uSpptkixyybhFAhKoMc/rz+Nc7omml7wzXTfvB8oJOSB9a7vw5eNots0scAl3IVAzg5/CnfzGlo2iO50y8SZVvZTlflK7snA46ms3xVqVgLKOCOPzWjBIIyAnPIx0Prmi61rUbu5d7k7ctkEcYH071R1OS1ijVpiHZugA3ZFSTZp2W7LOi6nf3lkHYvHDn5QRyV5A59PQdKni8Ox3cDyNKXVSeC+Npx3/Ssg61cpaIsRCxjJClai0+aUGaR7hwshBI7YoCCdpJon0R38P3M5toUZphiTPX8+uKg1VrjV78i/uCtuWwQgx8v5jNWVzKxdMntzVW8hlmwsS5btiglGsZ9FtIYotPjjFwF+fYGAJx3zWfq2q3V2xWSHy0I4Cjg8fqKoRwT2dwsdyoDEA4LZyK6CSTztPEakMWXByOlFim9blvwnqV3YWM7xbVndcxuAcrznPB6+/vTj4g1K71DdcXryRZysTPkE4Ayc9egpvh61nWzMTCM5J2hT0H40y1l0OzlZpooxOjHBRckmgPQk1dBcqzFfmJyD6Huay9MjaK6feQxY9M4wK0k1YallI4igKgkZ+4fSsueGa3umEnGDwQeo9aBJXRo+IPElvb2n2SNFeU7QwH3075H1rJsriWQEM21W5IH4/nVXXFt/PWSIjd0IA5+tRNNJ5IZHKsR1FO1yoc0Xc6/R7jT7OyuTJaxyzS5JLAc1x89zvu5XgUoN5x82Tj3NXvtQurQRN8vHUHrTdN0ae54t4iwwcH1q1sSlYriV5diyyF5O7EdatzR2T7XEKs7AZB5xiq0elzSXTiV/L8pyrZFWo5baxuhmNLjaOGPApoUHFLlRD4hubuS1eKWVxayPuMKghQ553DHSorOwtzapO2RK2SCDU+v6q1+uyKDyohnCk7vxrLtYH4k+7t6c0dRqL5bs0vtSRQJbwIAEOcgdTWffwTXMuOQpHzE9a1LGKFIjIyqzY5PWmRCS9uTHGMccfSnsF0zP0iymtphl1cDknpzW3q2qXdwqW4ghREUAFGK5OOpGOvvUYtxa3Xl3DKoH4gj1puqX0VwI4bWIRqg5OeSaLArSlfcngtwtuS5DsVH5Vm3lusoYbc5G3noRTImnRijysg9R6VpL5fkBkIbjsc0dR3ktLmXZLJbNKYnZFlXY6g4DAEEA/iKdZJEt0Wk" <> ..., "body" => "Sample picture", "imageName" => "1-1536824593426"}


mutation createComment($artId: String!, $body: String) {
  createComment(artId: $artId, body: $body) {
    id
    user {
      id
    }
    artId
    body
  }
}

我不确定这有什么问题。但是,突变仅显示旧参数。它不包含添加的新参数。另外,在我的解析器服务中,我只得到 art_id 和正文作为参数,如下所示。

%{art_id: "comma-2005-06", body: "Sample picture"}

我错过了什么吗?有人可以帮忙吗?

不是灵药错误

这是因为 FE 中的模式定义不包含新属性。

模式定义语言

为了便于理解服务器的功能,GraphQL 实现了一种人类可读的模式语法,称为其模式定义语言或“SDL”。 SDL 用于表达模式中可用的类型以及这些类型如何相互关联。

通过更新 schema.graphql 中的架构:

mutation createComment($artId: String!, $body: String, $base64Image: String, $imageName: String) {
  createComment(artId: $artId, body: $body, base64Image: $base64Image, imageName: $imageName) {
    ...commentData
  }
}

fragment commentData on Comment {
  id
  user {
    id
    fullName
  }
  artId
  body
  imageUrl
  imageName
}

GraphQL API 现在工作正常。