Pull to refresh
381
0

Разрабатываю API более 10 лет

Send message

На русском в настоящий момент нет. Но можно почитать гитхаб.

На английском — amazon, apple books.

Надеюсь, окажется полезной :)

Я теперь спать не смогу: это акведук из Сеговии или Пондюгара?

Пон-дю-Гар

С выходом книжки — поздравляю от все души.

Спасибо!

Спасибо за совет, добавил!

Нет, совершенно не о REST API, хотя ему (а также сравнению с gRPC и GraphQL) посвящен отдельный раздел. Напротив, я старался сделать книгу максимально абстрагированной от конкретных технологий.

Только сейчас заметил комментарий ¯\_(ツ)_/¯

Этот подход, на самом деле, описывает такой чуть более REST-овый GraphQL: есть один эндпойнт, который умеет всё (только, отличие от GraphQL, с кэшированием по id). Проблемы те же:

  1. Нельзя понять, что за операция была запрошена (надо тело читать). Отсюда такой сервис сложно профилировать (какие конкретно операции «тяжёлые») и ещё сложнее поставить рейтлимитер

  2. Содержимое GET /api/search/{id}нетипизировано — невозможно узнать, что находится внутри (какие данные каких типов), пока не прочитаешь.

Я видел множество попыток. И да, получается аналог HTML

`<div>Hello, TrueRomanus</div>` — представление для рендеринга
{ "user_name": "TrueRomanus" } — семантические данные

Я бы не был столь категоричен. Возможны разные варианты. Ключевой момент — клиент получает от сервера представление для рендеринга, а не семантичные данные. В случае MMORPG это, как правило, не так.

например бутстрапер любой MMORPG это тонкий клиент или нет?

Нет. GeForce now — скорее да, и то с некоторой натяжкой. MMORPG всё-таки позволяют кнопки в меню нажимать локальным кодом, а не вызовом сервера.

разрабатывать клиентское приложение работающее не на клиенте а по факту работающее на сервере сложнее

Не вижу особой разницы между этими утверждениями

Ну такое. Вот Amazon SDK for JavaScript https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/welcome.html

А вот, скажем, Ethereum JavaScript API: https://web3js.readthedocs.io/en/v1.10.0/getting-started.html

Казалось бы, найди 5 отличий в том, как их надо подключать.

Ну, в теории да, на практике нет. Скажем, Google свой веб-API карт называет Google Maps API, ArcGIS — Maps SDK, а Майкрософт свой поначалу называл Bing Maps SDK, а потом переименовал и вовсе в Web Control. Кто во что горазд, короче.

Этот паттерн я разбирал в главе «Асинхронность и управление временем»

https://habr.com/ru/articles/732646/

Да, он вполне возможен с точки зрения архитектуры (хотя не совсем REST-way с той точки зрения, что id — черный ящик, по нему невозможно понять, что это была за операция).

Полагаю, вас интересует не идемпотентность, а транзитивность.

Раскрыто (частично) в другой главе: https://habr.com/ru/articles/737728/

Действия сторонних акторов не участвуют в определении идемпотентности. Предполагаете, что между последовательными запросами никакой другой актор состояние не модифицирует.

Если профиль композитный, т.е. сервису B нужно самому выполнить несколько обращений для формирования ответа, то профит есть. Если там 20 байт JSON-а, то разница малозаметна, конечно.

Так же, как можно позволить клиенту отвечать за токен.

  1. Возвращать user_id из эндпойнта регистрации / проверки логина и пароля [которого на схеме нет, но сделать его, очевидно, придётся]

  2. Требовать передачу user_id во все остальные эндпойнты [на самом деле, во все релевантные эндпойнты]

1
23 ...

Information

Rating
Does not participate
Location
Россия
Registered
Activity