Size: a a a

pro.rb (Ruby/Rails / RU)

2019 September 23

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
мы не реализовывали релей протокол прост, а атомарно дергать их концепции оттуда смысла особо нет
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
А как без коннекшенов делать totalCount и подобные методы?
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
так. а в чём проблема делать методы?
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
у тебя коннекшены абстрагируют что-то более низкоуровневое. можно просто без дополнительного слоя абстракции
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Филд на типе будет выполняться на каждой сущности - как бы инстанс метод
На коннекшоне метод выполняется 1 раз - как бы класс метод
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
это вопрос кеширования от запроса к запросу?
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Нет, это вопрос простой архитектуры

foos {
 totalCount # хочешь выполнить 1 раз
 id # выполняешь на каждой сущности
}


Коннекшоны вроде как решают эту проблему
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
не, погоди, почему у тебя метаданные коллекции лежат вместе с элементами коллекции? это вопрос проектирования данных уже
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Для упрощения я опустил коннекшен, едж, нодес
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
у меня нет таких проблем т.к. вся мета вычисляется один раз. если клиенту зачем-то нужно смешать — пусть делает
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
в рестовых апихах точно такой же подход:

ты делаешь GET на коллекцию и получаешь не массив, а объект. а в объекте есть поле с нужным тебе массивом + какие-то метаданные
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
всякие каунты, курсоры, и прочая штука — просто на другом уровне. а нужные объекты живут себе спокойно на своём уровне и не засоряются хламом
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Так вы используете коннекшены, но только на верхнем уровне?
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
у нас не существует коннекшенов никаких
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
ни в каком виде
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
ну и в самом графкл их нет, это всё штуки из релея
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Тогда у вас

field foos
и там
meta {}
data {}

?
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
foos { 
 totalCount
 cursor
 ...ещё_что-то
 entries / foos / что_угодно_из_домена {
   id
 }
}
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
А можно псевдокодом простой пример импементации? Или доки/гайды где почитать
Я просто не нашел способов делать вещи типа totalCount на типах или резолверах
Или вы кешируете field на типе?
источник

IM

Igor Morozov in pro.rb (Ruby/Rails / RU)
class PaginatedOrders < GraphQL::Schema::Object
 field :total_count, Integer, null: false
 field :orders, [Order], null: false
end

class Query < ...
 field :orders, PaginatedOrders, null: false, resolver: PaginatedOrders
end


А дальше просто резолвер, который отдаст тотал_каунт и ордерс

Но тут в чём суть:

Ты вводишь дополнительную вложенность — вместо

{
  something { 
   foo(abc) {
   }
 }
}

появляется

{
 something {
   foo(abc) {
     ...meta
     foo { ... }
   }
 }
}

И
резолвишь ты не something.foo.foo, а something.foo.

Ка
к результат — изворачиваться не нужно, API простой, и прямолинейный
источник