Одно необязательное поле
Если это только одно дополнительное поле, вы можете передать в своем запросе необязательный аргумент :
query do
field :blog_posts, list_of(:blog_post) do
arg :extra_data, :boolean
resolve &MyAppWeb.Resolvers.Blog.posts/2
end
end
Несколько дополнительных полей
Но, если есть несколько необязательных аргументов, лучше использовать пользовательский input_object
:
input_object :extra_input do
field :extra_a, :boolean
field :extra_b, :boolean
field :extra_c, :boolean
end
query do
field :blog_posts, list_of(:blog_post) do
arg :extra_fields, :extra_input
resolve &MyAppWeb.Resolvers.Blog.posts/2
end
end
И в вашем преобразователе вы можете получить запросполей и создайте URL-адрес вашего HTTP-запроса с ними:
def posts(%{extra_fields: extra}, _resolution) do
# Here `extra` is a map of the optional fields requested. You can
# filter selected fields, map them to their HTTP service name and
# construct the HTTP url and query params before calling it in
# one go
end
В обоих случаях удалите определитель, указанный вами непосредственно в поле :extra_data
в вашем :blog_post
объект.