Разработчик (и) | Facebook и сообщество |
---|---|
Первоначальный выпуск | 14 сентября 2015 г. (14 сентября 2015 г.) |
Стабильный выпуск | Июнь 2018 г. |
Репозиторий | github.com / graphql / graphql-spec |
Написано на | Реализации на Java, JavaScript, Ruby, Scala и др. |
Операционная система | Кросс-платформенный |
Веб-сайт | graphql.org |
GraphQL - это язык с открытым исходным кодом запросов и манипуляций для API, а также среда выполнения для выполнения запросов с существующими данными. GraphQL был разработан внутри Facebook в 2012 году до публичного выпуска в 2015 году. 7 ноября 2018 года проект GraphQL был перенесен из Facebook в недавно созданный GraphQL Foundation, размещенный некоммерческой организацией Linux Foundation. С 2012 года развитие GraphQL следовало графику принятия, точно установленному Ли Байроном, создателем GraphQL. Цель Байрона - сделать GraphQL вездесущим на всех веб-платформах.
Он обеспечивает подход к разработке веб-API и сравнивается с REST и другими архитектурами веб-сервисов и противопоставляется им. Он позволяет клиентам определять структуру требуемых данных, и та же структура данных возвращается с сервера, что предотвращает возврат слишком больших объемов данных, но это влияет на эффективность веб-кэширования результатов запроса может быть. Гибкость и богатство языка запросов также добавляют сложности, которые могут не иметь смысла для простых API. Он состоит из системы типов, языка запросов и семантики выполнения, статической проверки и самоанализа типа.
GraphQL поддерживает чтение, запись (изменение) и подписку на изменения данных (обновления в реальном времени - чаще всего реализуются с использованием WebHooks ). Серверы GraphQL доступны для нескольких языков, включая Haskell, JavaScript, Perl, Python, Ruby, Java, C ++, C#, Scala, Go, Rust, Elixir, Erlang, PHP, R и Clojure.
9 февраля 2018 г. язык определения схемы GraphQL (SDL) стал частью спецификации.
POST запрос:
{orders {id productsList {product {name price} amount} totalAmount}}
Ответ:
{"data": {"orders": [{"id": 1, "productsList": [{"product": {"name": "orange", "price": 1.5}, "amount": 100}], "totalAmount": 150}]} }
.