diff --git a/API.ru.html b/API.ru.html index c8b2952..06ed9d0 100644 --- a/API.ru.html +++ b/API.ru.html @@ -144,6 +144,33 @@

Если мы вернёмся к нашему примеру с погодным api, то увидим, что один уровень абстракции выделился автоматически: http api. Мы можем построить прочие виды api поверх базового http. Можем ли мы выделить ещё какие-то уровни, скажем, внутри самого http api?

+

Построение иерархии абстракций

+ +

Как обычно, мы начнём с вопроса "зачем" - если у нас не получается строгая иерархия, зачем нужна нестрогая? В первую очередь для того, чтобы вашим разработчикам было удобнее пользоваться вашим api. Представим, что мы спроектировали вот такой интерфейс для нашего http api:

+ + + +

Покрывает ли такой интерфейс наши сценарии использования? С одной стороны кажется, что да - каждый потребитель сможет получить нужный ему набор информации.

+ +

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

+ +

Оптимально было бы ввести ещё один метод:

+ + +

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

+ +

Аналогично, если мы будем проектировать api для новостных ресурсов, то придём к необходимости выделения сущности "картина атмосферных фронтов"; при проектировании api для диспетчерских служб - к сущности "план опасных для полета зон", и так далее.

+ +

Разделение уровней абстракции должно происходить вдоль трёх направлений:

+