Веб-разработка? Это просто! Создаём собственный API-6
Создаём собственный API-6
Всем привет. Сегодня мы разработаем два ключевых класса. Во-первых, мы изменим способ обращения к Gateway и во-вторых, разработаем Api Handler который сможет быть по настоящему классом-контейнером для всей иерархии API.
Начнём с API Handler, чтобы изменения в Gateway были более очевидны. Забегая вперёд, заметим, что все изменения не касаются удалённого хоста. Т.о. драйвер для работы с API на удалённом хосте остаётся таким же. На API хосте мы всё так же принимаем запрос и всё так же возвращаем ответ, но, в данном случае, меняется способ обработки этого запроса и формат ответа в случае ошибки. Единственные изменения, которые должны произойти на удалённом хосте - это информация об авторизации (имя пользователя и пароль), которую
необходимо добавить к запросу.
Таким образом, мы получили новый класс, наследник первой версии шлюза, который проверяет пользовательский запрос и гарантирует правильный формат данных для нормальной работы всего приложения. Теперь api_handler может свободно манипулировать всеми высокоуровневыми методами, оставляя внизу вопросы низкоуровневых проверок, выполнения запроса, реализацию протокола и т.п. По сути, api_handler стал удобной обёрткой. Его структура отличается от рассмотренной в первой статье. В первой статье предполагалось, что шлюз
будет чем-то внешним, но сейчас api_handler реализован так, что он скрывает шлюз в себе. Хотя, логическая суть шлюза от этого не изменилась. Шлюз по прежнему принимает запрос и отправляет ответ удалённому хосту.
В следующей части статьи мы отфильтруем запрос удалённого хоста от потенциально опасного мусора и предотвратим различные неприятности в духе SQL-инъекций. Конечно, для этого можно было бы использовать какой-нибудь мощный класс типа AdoDB, в котором механизм защиты уже реализован, но, во-первых, этот пример API является исключительно демонстрационным, во-вторых, возможно, нам понадобится фильтровать запрос не только на уколы. Так что ждём следующей статьи, чтобы посмотреть на новые изменения :)
Как всегда, полная версия кода доступна в аттачменте, а я жду ваших критических замечаний и комментариев.