The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Facebook представил язык запроса данных GraphQL"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Facebook представил язык запроса данных GraphQL"  +/
Сообщение от opennews (??) on 15-Сен-15, 11:30 
Facebook открыл (https://code.facebook.com/posts/1691455094417024/graphql-a-d.../) свои наработки, связанные с языком формирования запросов GraphQL (http://graphql.org/), предоставляющий API для эффективного получения данных. GraphQL сочетает высокую гибкость, достаточную для описания всех потоков данных в Facebook, с простотой для изучения, способствующей быстрому внедрению языка в новые продукты.


Для загрузки доступен черновик спецификации GraphQL (https://github.com/facebook/graphql), эталонная реализация на языке JavaScript (https://github.com/graphql/graphql-js), библиотека (https://github.com/graphql/libgraphqlparser) с парсером для C/C++, обвязки (https://github.com/chentsulin/awesome-graphql) для различных языков программирования (Go, Ruby, Scala, Java, .Net, Python) и набор (https://github.com/graphql) сопутствующих инструментов, в том числе работающая в браузере интегрированная среда для формирования запросов graphiql (https://github.com/graphql/graphiql) и серверные компоненты для swapi (https://github.com/graphql/swapi-graphql) и express (https://github.com/graphql/express-graphql). Код открыт под лицензией BSD.


Последние несколько лет  GraphQL активно используется в Facebook и служит основой для абстрагирования потоков данных для мобильных приложений для Android и iOS, позволив уйти от практики разработки мобильных приложений в виде надстройки над вариантом сайта для мобильных устройств в сторону самодостаточных программ с логикой выполнения на стороне клиента. При реализации парадигмы Model-View для получения данных отлично подходит формат JSON, но существующие методы для отправки запросов, такие, как REST и ad hoc, не отвечали требованиям Facebook и требовали выноса части логики на сторону сервера, не обладая должной универсальностью. Facebook попытался решить эту проблему в GraphQL и за последние три года перевёл все свои мобильные приложение на данную технологию.


В GraphQL состав результата запроса диктуется клиентом и содержит только необходимый набор данных -  лишь то, что запросил клиент и ничего лишнего. Запрос оформляется в форме иерархического набора полей, а ответ приходит в отзеркаленном формате JSON с заполнением полей необходимыми данными. Корректность запроса обеспечивается через встроенную систему проверки типов.


<center><a href="https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpf1/t39.2365... src="https://www.opennet.ru/opennews/pics_base/0_1442302729.jpg&q... style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></a></center>

Особенности GraphQL:


-  Явное задание формы данных - ответ отзеркаливает поля, указанные в запросе, что позволяет точно знать какие именно данные будут получены и какого они будут типа;
-  Иерархическая организация, позволяющая отследить взаимосвязь между объектами без необходимости отправки повторных запросов и формирования сложных условий слияния, в отличие от RESTful-систем RESTful и SQL. Иерархия данных задаётся с использованием структуры в форме графа и отлично сочетается с потребностями, возникающими при построении интерфейсов пользователя;

-  Жесткая типизация - каждый уровень запроса GraphQL связывается (https://github.com/facebook/graphql) с определённым типом и для каждого поля декларируется свой тип (по аналогии с SQL) Такой подход позволяет выявить ошибки на этапе до выполнения запроса и даёт возможность повысить качество клиентских программ;

<font color="#461b7e">
   enum Episode { NEWHOPE, EMPIRE, JEDI }

   interface Character {
     id: String
     name: String
     friends: [Character]
     appearsIn: [Episode]
   }

   type Human : Character {
     id: String
     name: String
     friends: [Character]
     appearsIn: [Episode]
     homePlanet: String
   }
</font>


-  GraphQL является лишь протоколом, не налагающим каких-либо требований к характеру хранилища. На сервере за каждое поле GraphQL отвечает определённая функция, что позволяет легко адаптировать взаимодействие с клиентами по GraphQL  в имеющиеся кодовые базы, без изменения существующих схем хранения и бизнес-логики;

-  Независимость от версии серверного API - так как форма возвращаемых данных задаётся клиентом, серверное API может расширяться без опасности нарушения совместимости с клиентским ПО. Например, на сервере могут быть реализованы обработчики новых полей, которые будут применяться только для версий клиентов, поддерживающих эти поля, а для старых клиентов будут игнорироваться;


-  Возможность получения сведений о поддерживаемых сервером данных. У сервера GraphQL можно запросить список поддерживаемых типов и получить более полные сведения о возможностях предоставляемого сервером API, без необходимости изучения кода и спецификаций.


<center><a href="https://scontent.xx.fbcdn.net/hphotos-xpf1/t39.2365-6/118913... src="https://www.opennet.ru/opennews/pics_base/0_1442304015.jpg&q... style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></a></center>


URL: https://code.facebook.com/posts/1691455094417024/graphql-a-d.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=42964

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Facebook представил язык запроса данных GraphQL"  +2 +/
Сообщение от Вадик (??) on 15-Сен-15, 11:30 
Штука вроде годная, особенно с зеркалированием
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Facebook представил новый язык формирования запросов GraphQL"  +1 +/
Сообщение от Аноним (??) on 15-Сен-15, 11:34 
Давно такое искал, а то с RESTful черт ногу сломит.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Facebook представил язык запроса данных GraphQL"  +/
Сообщение от Аноним (??) on 15-Сен-15, 11:34 
непонятно, как реализовывать поддержку таких запросов на бэкенде
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Facebook представил язык запроса данных GraphQL"  +/
Сообщение от Аноним (??) on 15-Сен-15, 11:45 
Видимо примерно так https://github.com/graphql/libgraphqlparser/blob/master/pyth...
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Facebook представил язык запроса данных GraphQL"  –3 +/
Сообщение от анон on 15-Сен-15, 11:56 
Что в слове бэкенд тебе было не понятно, что ты эту ссылку сюда впендюрил?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Facebook представил новый язык формирования запросов GraphQL"  +2 +/
Сообщение от Аноним (??) on 15-Сен-15, 13:06 
RESTful видимо намекает на UNREST :)
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8. "Facebook представил новый язык формирования запросов GraphQL"  –8 +/
Сообщение от жабабыдлокодер (ok) on 15-Сен-15, 13:06 
XML был бы удобней: API можно описать схемой, по которой в клиенте легко разобрать и реализовать структуру данных.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Facebook представил новый язык формирования запросов GraphQL"  –2 +/
Сообщение от Owlet on 15-Сен-15, 14:22 
Угу, и каждый клиент разберёт по-своему, несовместимо с остальными..
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Facebook представил язык запроса данных GraphQL"  +/
Сообщение от Аноним (??) on 15-Сен-15, 14:48 
Все он правильно сделал (только непонятно почему только на питон, хотя доступны и другие языки).
Если вы не знаете определение слова парсер, то про бэкенд не стоит даже заикаться.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

11. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним (??) on 15-Сен-15, 15:04 
Я невнимательно читал или оно не может в join'ы?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Facebook представил язык запроса данных GraphQL"  +2 +/
Сообщение от анон on 15-Сен-15, 15:19 
И как парсер позволит исполнить запрос? Не разобрать, а исполнить?
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Facebook представил новый язык формирования запросов GraphQL"  +1 +/
Сообщение от Аноним (??) on 15-Сен-15, 15:22 
Схема вещь однозначная
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

15. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от ... on 15-Сен-15, 16:13 
Объединять нужно таблицы. А у них скорее документы.
Посмотри на картинку в новости. C объединениями это выглядело-бы как то так:
"select user.id, user.name, <...> profilePicture.uri, <...>
from user, profilePicture <...>
where profilePicture.id = user.profilePictureId <...> "
Им это все не нужно.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

16. "Facebook представил новый язык формирования запросов GraphQL"  +4 +/
Сообщение от ... on 15-Сен-15, 16:30 
JSON vs XML уже давно было. JSON победил.
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

17. "Facebook представил новый язык формирования запросов GraphQL"  +8 +/
Сообщение от Адепт on 15-Сен-15, 17:08 
Идеальный ник для этого комментария
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

18. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним (??) on 16-Сен-15, 07:21 
вторая картинка, поле friends
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

19. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним (??) on 16-Сен-15, 09:35 
первая картинка, поле friends
Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним (??) on 16-Сен-15, 11:09 
Mongo изобрели?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Facebook представил язык запроса данных GraphQL"  +1 +/
Сообщение от MPEG LA (ok) on 16-Сен-15, 20:25 
GraphQL - язык, а не БД, барашко. над чем ты собрался выполнять запрос?
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

22. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним (??) on 16-Сен-15, 22:50 
Пусть стандартизируют, а то без стандарта это очередной велосипед
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Facebook представил новый язык формирования запросов GraphQL"  +/
Сообщение от Аноним email(??) on 07-Апр-17, 14:26 
на медиуме есть годные статьи на РУ
https://medium.com/marcius-corp/tutorial-graphql-subscriptio...
https://medium.com/marcius-corp/tutorial-graphql-server-with...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру