Size: a a a

GraphQL — русскоговорящее сообщество

2018 July 02

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Алексей Родионов
Так как приватный ключ всё равно на клиенте. )
Да, это сосвсем как-то бессмысленно, разве что от школьников, которые парсят сайты на фрилансе за еду))
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
В общем, для начала тебе нужно выписать вообще все поля, которые есть в базе данных и будут в твоём API. Потом понять кто и при каких условиях какие поля может читать, писать, обновлять и удалять.
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Алексей Родионов
Конкретный список проблем, пожалуйста, в студию. )
Ну, абстрактно:

Пусть у нас найти пользователя по комментарию — нетривиальный и сложный запрос (мы плохие программисты, которые не смогли)

Тогда даже ограничив глубину можно сделать

user->commentar[]->user[]->commentary[]->user[]

Предположим, злобные хакеры посидели с профайлером и нашли наш сложный запрос

Двадцадь аккаунтов — пусть 60 запросов в секунду (то есть, даже по IP не залочить) — и всё, прод валяется у всех
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Входящей нагрузки нет, злоумышленник затерялся в общей массе, всё плохо
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Алексей Родионов
В общем, для начала тебе нужно выписать вообще все поля, которые есть в базе данных и будут в твоём API. Потом понять кто и при каких условиях какие поля может читать, писать, обновлять и удалять.
Да это-то да, в REST-то мы можем)
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Так подсчитывайте Cost и Complexity каждого запроса.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Если больше порогового значения, не выполняйте.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Подключите Apollo Engine, собирайте метрики. Смотрите, что происходит.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Статья, которую я скинул, она об этом.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Ребята из Spectrum Chat это юзают на продакшене.
источник
2018 July 03

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Кстати, в Apollo Engine есть ещё кэширование.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Чтобы не вычислять одно и то же каждый раз.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
А если юзать Prisma (https://prisma.io), то это вообще считай ORM, превращающая базу данных в OpenCRUD GraphQL API. То есть под капотом она должна индексы строить.
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Алексей Родионов
Так подсчитывайте Cost и Complexity каждого запроса.
Не пойми неправильно, я за GraphQL всей душой, но посоны (безопасники) — не поймут) spectrum.chat, кстати, похоже, лежит))
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Во, ожил
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Вот ещё очень полезный пакет:

https://github.com/confuser/graphql-constraint-directive

Помимо того, что с помощью graphql-shield можно ограничить кто что может читать и писать, этот пакет добавляет валидацию самих полей (например, по регулярке).
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Niko lai
Не пойми неправильно, я за GraphQL всей душой, но посоны (безопасники) — не поймут) spectrum.chat, кстати, похоже, лежит))
Ну раз собрались использовать GraphQL, нужно изучать как это работает и перестраивать своё мышление.

Если раньше ваши безопасники следили чтобы не было слишком частых запросов к endpkint'ам, то теперь у вас один endpoint и нужно смотреть не на количество запросов, а на «качество» – насколько сложный это запрос.

Те же яйца только вид в профиль.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
У вас есть человек кто занимается базами данных, оптимизирует SQL-запросы?
источник

Nl

Niko lai in GraphQL — русскоговорящее сообщество
Алексей Родионов
Ну раз собрались использовать GraphQL, нужно изучать как это работает и перестраивать своё мышление.

Если раньше ваши безопасники следили чтобы не было слишком частых запросов к endpkint'ам, то теперь у вас один endpoint и нужно смотреть не на количество запросов, а на «качество» – насколько сложный это запрос.

Те же яйца только вид в профиль.
Нет, это так не работает, абстрактно: всем понятно, как лочить по IP за превышение RPM, есть умение, есть практика, есть автоматические инструменты
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Подключите его к процессу разработки API.
источник