Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Сказка про query languages
(с оскорблениями в адрес GraphQL)
18+
Ты кто?
Виктор Шепелев, aka @zverok
● Рубист с 2003-го (кажется)
● BrandSpotter→Toptal→Verbit.ai
● SciRuby
● mkdev.me
zver...
Основной сайт
API
Мобильное приложение
Партнёрка
Телеграм-бот
Аналитика
Глава 1: все пишут на Java и любят SOAP« »
SOAP (он же XML-RPC)
● XML
● ориентирован на глаголы (Remote Procedure Calls)
● жёсткая схема
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www....
SOAP
Достоинства:
● легко отображается на
серверные примитивы (если
сервер на Java)
● схема — часть стандарта
Недостатки:
...
Глава 2: все пишут на Ruby, REST рулит
PHP, конечно
REST
● Стиль, а не протокол
● Ориентирован на существительные (ресурсы), адресуемые URL
● Использование HTTP verbs
● State...
GET /racoons.json?sex=female&fertile=true&country=Ukraine,Poland
{
"meta": {"count": 1000, "page": 0, "next": 1}
"response...
REST
Достоинства:
● понятие «ресурса»
● легко экспериментировать в
браузере и в коде
● естественное использование
идиом HT...
Глава 3: входит GraphQL, все счастливы
на самом деле нет
GraphQL
морская?
свинка?
graph?
query language?
GraphQL
● Предложен Facebook-ом в 2012-м
● Позволяет запросить сразу дерево ресурсов и указать необходимые
поля
● Машиночи...
query {
racoons(limit: 100, filter: {AND: {sex: "female", fertility: true}}) {
name
city
age
children(age_gte: 3) {
name
c...
GraphQL
Достоинства:
● машиночитаемая схема
● структурированный ответ
● понятие query language
Недостатки:
● жёсткий
● тре...
Slightly
JSON-alike
Request
Format for
Optimized
Querying of
Internal
Hierarchical
Data
Чего мы хотим?
● URL для каждого ресурса
● Гибкие выборки по множеству ресурсов в бесконечном графе
разнородных объектов
●...
Глава 4: А чо, есть чо?
REST is not dead!
● OpenAPI (бывший Swagger)
● HATEOS
● Facebook Graph API (≠ GraphQL!)
graph.facebook.com/12345/?fields=c...
SQL
SELECT r.name, r.gender, c.name, c.color, d.name, d.date
FROM racoons r
JOIN racoons c ON c.parent_id = r.id
LEFT JOIN...
ElasticSearch Query DSL
{
"query: {
"bool": {
"must": [
{"match": {"sex": "female"}},
{"match": {"fertility": true}},
{"ne...
OverpassQL (OpenStreetMap)
( node[amenity=police]; way[amenity=police]; rel[amenity=police] )->.polices;
( node[amenity=ba...
При чём здесь Semantic Web?
RDF (Resource Description Framework):
● Ресурсы определяется URL-ом
● Ресурс описывается преди...
PREFIX racoons: <https://racoons.xxx/schema>
PREFIX schema: <http://schema.org>
SELECT ?name ?age ?childName ?childDecease...
Выводы?
Выводы!
● Правильный query language — в будущем
● GraphQL — для очень специальных случаев
● Хорошо отдизайненый REST почти...
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
You’ve finished this document.
Download and read it offline.
Upcoming SlideShare
What to Upload to SlideShare
Next
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

Share

A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev

Download to read offline

Ruby Meditation #21
April 14, 2018
Kharkiv

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev

  1. 1. Сказка про query languages (с оскорблениями в адрес GraphQL) 18+
  2. 2. Ты кто? Виктор Шепелев, aka @zverok ● Рубист с 2003-го (кажется) ● BrandSpotter→Toptal→Verbit.ai ● SciRuby ● mkdev.me zverok.github.io
  3. 3. Основной сайт API Мобильное приложение Партнёрка Телеграм-бот Аналитика
  4. 4. Глава 1: все пишут на Java и любят SOAP« »
  5. 5. SOAP (он же XML-RPC) ● XML ● ориентирован на глаголы (Remote Procedure Calls) ● жёсткая схема
  6. 6. <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <racoon:GetRacoonList xmlns:racoon="https://racoons.xxx/schema"> <racoon:Country>Ukraine</racoon:Country> <racoon:Age>2</racoon:Age> </racoon:GetRacoonList> </soap:Body> </soap:Envelope> <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <racoon:GetRacoonListResponse xmlns:racoon="https://racoons.xxx/schema"> <racoon:Racoon><racoon:Name>Satan</racoon:Racoon>....</racoon:Racoon> ...... </racoon:GetRacoonListResponse> </soap:Body> </soap:Envelope> Запрос Ответ
  7. 7. SOAP Достоинства: ● легко отображается на серверные примитивы (если сервер на Java) ● схема — часть стандарта Недостатки: ● Ориентирован на глаголы ● Жёсткий и хрупкий ● XML, Карл! ● тяжело экспериментировать
  8. 8. Глава 2: все пишут на Ruby, REST рулит PHP, конечно
  9. 9. REST ● Стиль, а не протокол ● Ориентирован на существительные (ресурсы), адресуемые URL ● Использование HTTP verbs ● Stateless Реальность ● URL в стиле /resources/<id> ● JSON-ответы (может быть)
  10. 10. GET /racoons.json?sex=female&fertile=true&country=Ukraine,Poland { "meta": {"count": 1000, "page": 0, "next": 1} "response": [ {"name": "Pumpkin", "age": 2.3, "fertile": true, "city": "Odesa"} ... ] } Ну или (если не повезло) GET /get_racoons.php?filtername[1]=sex&filtervalue[1]=female&... Или... GET /rcnapi/<yourapikey>/for/breeding/sex/female/p1000/perform (и спасибо, что не SOAP)
  11. 11. REST Достоинства: ● понятие «ресурса» ● легко экспериментировать в браузере и в коде ● естественное использование идиом HTTP Недостатки: ● стиль, а не стандарт ● не самоописующий ● дорогостоящая выборка дерева ресурсов
  12. 12. Глава 3: входит GraphQL, все счастливы на самом деле нет
  13. 13. GraphQL морская? свинка? graph? query language?
  14. 14. GraphQL ● Предложен Facebook-ом в 2012-м ● Позволяет запросить сразу дерево ресурсов и указать необходимые поля ● Машиночитаемая схема является частью стандарта ● JSON-подобное тело запроса «в той же форме, в которой нужен ответ»
  15. 15. query { racoons(limit: 100, filter: {AND: {sex: "female", fertility: true}}) { name city age children(age_gte: 3) { name color deceases { name date cured } } } }
  16. 16. GraphQL Достоинства: ● машиночитаемая схема ● структурированный ответ ● понятие query language Недостатки: ● жёсткий ● требует априорного знания схемы ● неудобный для экспериментирования и discovery ● игнорирует HTTP-идиомы (Facebook!) ● этот слайд слишком короткий
  17. 17. Slightly JSON-alike Request Format for Optimized Querying of Internal Hierarchical Data
  18. 18. Чего мы хотим? ● URL для каждого ресурса ● Гибкие выборки по множеству ресурсов в бесконечном графе разнородных объектов ● Запросы, которые удобно писать и читать (человеку и машине) ● Структурированные ответы ● Discoverability общей схемы и отдельных ресурсов
  19. 19. Глава 4: А чо, есть чо?
  20. 20. REST is not dead! ● OpenAPI (бывший Swagger) ● HATEOS ● Facebook Graph API (≠ GraphQL!) graph.facebook.com/12345/?fields=comments{comments,from,id}
  21. 21. SQL SELECT r.name, r.gender, c.name, c.color, d.name, d.date FROM racoons r JOIN racoons c ON c.parent_id = r.id LEFT JOIN deceases d ON d.racoon_id = c.id WHERE r.sex = "female" AND r.fertility = true LIMIT 100
  22. 22. ElasticSearch Query DSL { "query: { "bool": { "must": [ {"match": {"sex": "female"}}, {"match": {"fertility": true}}, {"nested": { "path": "place", "must": [ {"match": {"country": "Ukraine"}} ] } .....
  23. 23. OverpassQL (OpenStreetMap) ( node[amenity=police]; way[amenity=police]; rel[amenity=police] )->.polices; ( node[amenity=bank]; way[amenity=bank]; rel[amenity=bank]; )->.banks; ( node.banks(around.polices:3000); way.banks(around.polices:3000); rel.banks(around.polices:3000); )->.banksNearPolices; (.banks; - .banksNearPolices;); out geom meta;
  24. 24. При чём здесь Semantic Web? RDF (Resource Description Framework): ● Ресурсы определяется URL-ом ● Ресурс описывается предикатами (id, предикат, значение) ● Значение может быть базовых типов или ссылкой на другой ресурс ● Глобальные схемы и пространства имён ● SPARQL: язык запросов
  25. 25. PREFIX racoons: <https://racoons.xxx/schema> PREFIX schema: <http://schema.org> SELECT ?name ?age ?childName ?childDecease WHERE { ?racoon a racoons:Racoon ; schema:name ?name ; schema:age ?age ; schema:child ?child . ?child schema:name ?childName ; racoons:decease ?childDecease . } SELECT → CONSTRUCT Позволяет определить структуру графа из элементов ответа
  26. 26. Выводы?
  27. 27. Выводы! ● Правильный query language — в будущем ● GraphQL — для очень специальных случаев ● Хорошо отдизайненый REST почти непобедим ● В идеях Semantic Web что-то есть ● Еноты рулят Виктор Шепелев aka @zverok zverok.github.io

Ruby Meditation #21 April 14, 2018 Kharkiv

Views

Total views

211

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

0

Shares

0

Comments

0

Likes

0

×