Comments 42
graphql это фактически стандарт
graphql это система которая жёстко связывает программный код и документацию. Документация всегда и на 100% актуальна
graphql позволяет без изменения на стороне бэкэнда делать запросы нескольких разнородных объектов в одном запроса, выбирать только необходимые для работы поля объектов, в том числе выбирать или не выбирать поля связанных объектов произвольной вложенности
Да, удобства от использования действительно есть. Но достигается оно за счет того, что из любого места приложения можно получить любые данные. То есть данные лежат в общей куче. В ооп, такое просто не допустимо. Но лично мне, как лежат данные, если их раскладываю не я лично, безразлично. Поэтомуон действительно делает работу проще и понятнее, при условии что есть готовые библиотеки, которые покрывают все потребности. Иначе придется окунутся в мир того, что только вчера придумали.
Есть swagger. Не знаю можно ли его рассматриватт как некий стандарт но штука мощная с консолью и документацией.
То есть, api как было, так и осталось, только теперь оно не на уровне https, а на программном уровне.
API никогда и нигде не было на уровне https. Потому что https это транспортныый уровень, а не програмный. И graphql и rest и даже soap используют https для безопасного соединения, а не для реализации API.
Но доступ к ним будет не через https, а черз один рутовый контроллер.
В нормальном сервисе доступ всегда будет через https. А вот количество ендпоинтов в сервисе будет разным. В rest приложении будет много ендпоинтов, условно «на каждый случай». А в приложении с graphql будет один эндпоинт позволяющий получать различные данные.
API никогда и нигде не было на уровне https. Потому что https это транспортныый уровень, а не програмный. И graphql и rest и даже soap используют https для безопасного соединения, а не для реализации API.
К сожалению, rest API строится именно на уровне http (можно без s). Так называемый HTTP REST — это надстройка над http, который строго говоря, именно программный уровень. Можно использовать http исключительно как транспортный уровень, но для этого приложение не должно знать тонкости реализации уровня http, например не обрабатывать http коды ответов, что противоречит «правильному» rest.
К сожалению, rest API строится именно на уровне http (можно без s). Так называемый HTTP REST — это надстройка над http, который строго говоря, именно программный уровень. Можно использовать http исключительно как транспортный уровень, но для этого приложение не должно знать тонкости реализации уровня http, например не обрабатывать http коды ответов, что противоречит «правильному» rest.
Строго говоря, в оригинальном определении REST про правильные коды HTTP ничего нет, даже использование GET для запроса ресурса приводится лишь как пример. Все требования, о которых Вы пишете, придумали позднее.
Кстати restapi не выполняет всех принципов rest ТК как правило полагается на данные сессии клиента которые есть ни что иное как хранение состояния приложения на сервере. Я уже не говорю о смешении транспортного протокола с протоколом уровня приложения. Например сходу разобрать чего нет на сервере получив 404 ответ невозможно. user/joe — 404 это в базе нет пользователя Джо или же нет url user ТК сервис расположено по url users?
Может я не понимаю, но мне кажется, что graphql, это всего-лишь описание языка запросов
а так же описание как эти запросы обрабатывать на стороне сервера. Другими словами это стандарт на API.
То есть данные лежат в общей куче
какие данные? чьи данные? в какой общей куче? На сервере у вас точно та же БД, что и была.
В ооп, такое просто не допустимо.
причем здесь ООП? Мы же про апи разговариваем.
как уже сказали, с помощью state management строятся современные js-приложения, работающие с api или не работающие с api.
Ребята, а как разруливать права доступа в graphql?
Если АПИ более-менее похожий, то разруливается на уровне резолверов.
Если используете Apollo, то вот есть статья, где расписывается как они работает через директивы: www.apollographql.com/docs/guides/access-control.html
Конечно есть у них и какие то админские схемы, скорее всего, на и внутри этих админские схемы также доступ разделен по полям и тп. Вообще тема разделения доступа в graphql пока открыта. И разделение схем это не решение ТК даже для самых простых случаев например типа блогов. Я и кю доступ к редактированию своих статей и к чтению чужих и тп не будешь же каждому юсеру свою схему давать
Я и кю доступ к редактированию своих статей и к чтению чужих и тп не будешь же каждому юсеру свою схему давать— это одна схема, только какие именно записи можно решить на resolve. Но если есть различие, к примеру — кто-то может удалять комментарии — это уже 2 схемы. Не надо давать каждому схему, но отделить различные, по мне, лучше сразу на этапе генерации. Это более секьюрно, когда невидно что и как происходит на сервере. Сервер всегда должен быть черной коробкой для клиента.
можно ли воспринимать graphql как современную реинкарнацию soap?
Похоже! 1-в-1, только на новомодных JSON'ах вместо старых-добрых XML-ей :trollface:
SOAP и GraphQL прям как близнецы-братья. Оба заявляют независимость от транспортного протокола, оба описывают формат взаимодействия и требуют описания схемы передаваемых данных (у SOAP — это WSDL), в которой описываются запросы и возвращаемые типы.
Нет решение основанных на Java, которые позволяют вам использовать GraphQL вместе с обнаружением сервисов, балансировщиком или API gateway из коробки
Балансировка и транспорт между сервисами это больная проблема подхода микросервисов. Сейчас в принципе нет простого подхода для решения проблем взаимодействия между отдельными сервисами.
Пусть меня заминусуют, но до WS-SOAP, где и асинхронность и распределенные транзакции и безопасность и не только http — им всем еще расти и расти, а там может и измениться веб.
Что Вы имеете в виду WS-SOAP не нашел такой аббревиатуры в поисуовой выдаче?
Никто не спорит с тем что SOAP мощный протокол. Но все же graphql имеет преимущество по сравнению с SOAP, хотя имеет и недостатки.
Я эти преимущества уже перечислил.
Graphql позволяет запрашивать произвольное количество разнородных объектов в одном запроса
Graphql позволяет запрашивать только необходимые поля и необходимые вложенные объекты
Graphql не только язык описания сервисов но имеет также принципы построения бэкэнда на основании функций resolver которые обеспечивают вот эту самую указанную выше функциональность.
Ну и в дополнение скажу что soap чрезмерно сложен. Хотя конечно проще чем CORBA. Не даром повсеместно вытесняет restapi. Из технологий которые имеют полноценную поддержку soap кроме к Майкрософт, это java, php, 1с. Node.js имеет две библиотеки и то с ограниченной поддержкой. Graphql все же проще. Он очень прост для понимания.
Я именно и подумал что вы на советах предлагаете это сделать в первую очеркдь.
А кардинальное отличие graphql от swager/openapi в том что swaber/openapi это стандарт описания сервисов который даёт средство для документирования и запросов, но который никакие связан с кодом самих сервисов. Поэтому не гарантируется их соответствие. В graphql определение и документация серыисов является частью исполняемого кода поэтому всегда гарантируется их полная согласованность.
Если бы производство нового останавливалось на ресерче старого рынка, то утром бы на работу вы поехали на бричке, и, дай бог, хотя бы на самоедущей, а не запряженной конями.
Суть не только в том, чтобы решить все проблемы связанные с апи и подготовить по этому документацию. Решение должно быть как можно проще, удобнее. Оно должно быть повернуто спиной к разработчику. И не только разработчику, который бородат и в свитере, но и только что вылупившемуся из яйца фронтендеру.
Если odata за 10+ лет так и осталась уделом 2.5 энтепрайзеров, то что-то здесь не так.
Статья удалена