Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. APIs

Создаем свой стартап: Проектирование RESTful API

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Running Multiple Domains
Building Your Startup With PHP: Bootstrap Your Home Page

Russian (Pусский) translation by Yura Bobrov (you can also view the original English article)

Final product image
What You'll Be Creating

Это руководство является частью цикла Создание вашего стартапа с PHP на Envato Tuts+. В этом цикле я проведу вас через запуск стартапа от идеи к реализации, с помощью моего приложения Meeting Planner  как примера из реальной жизни. На каждом шаге всего пути, я буду выпускать код Meeting Planner как открытые примеры, которые вы можете изучать . Я также буду обращать внимание на вопросы связанные с бизнесом стартапа, как они возникают.

Зачем строить API для вашего стартапа?

Основная причина по которой я добавляю API для Meeting Planner  в настоящее время это создание основы для построения мобильных приложений iOS. Мобильное приложение будет использовать API, чтобы пользователи могли регистрироваться и авторизовываться, а затем дать им возможность планировать встречи.

APIs также имеют вторичный эффект, они помогают вам переосмыслить и лучше организовать весь код, который вы написали на сегодняшний день. Есть конечно места в коде Meeting Planner , которые становится запутанными. Теперь я должен упростить их снова для мобильных приложений для реализации возможностей без шума.

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

Как напоминание весь код для Meeting Planner является открытым исходным кодом и написан на PHP фреймворке Yii2. Значительная часть этого эпизода описывает, как использовать фреймворк Yii для поддержки API. Если вы хотите узнать больше о Yii2, проверьте мой параллельный цикл программирование с Yii2.

Прежде чем погрузиться в код API, я хотел бы призвать вас попробовать спланировать вашу первую встречу, так вы узнаете, о чем я говорю.

Если у вас есть вопросы по этому руководству или по самому приложению, я участвую в обсуждениях ниже, а также, вы можете связаться со мной на Twitter по @lookahead_io. Я всегда открыт для новых идей функций для Meeting Planner, а также предложений для будущих серий эпизодов.

Проектирование вашего API

Как только я подготовился к созданию API, появились различные понятия, необходимые для понимания. Я направил некоторые из них в программирование с Yii2: создание RESTful API (Envato Tuts+).

Во-первых, мне нужно было создать конечную точку для API, куда будут приходить все обращения с мобильных приложений. Я решил использовать независимый сторонний пакет в  Yii Advanced Application, например https://api.meetingplanner.io вместо https://meetingplanner.io/api/. Это позволяет сделать чистое разделение кода API от остальной части сервиса.

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

В-третьих, я хотел бы подготовить код API для управления версиями. Например старое приложение iOS, которое не было обновлено, может использовать API v1.0, в то время как обновившись может вызвать API v2.0. Yii предоставляет методы для этого, но я не реализовал их в текущем проекте.

В-четвертых, я хотел соответствовать как можно большему числу REST стандартов. Это то, что я начал делать, но потребует дополнительных исследований, чтобы осуществить это в полной мере.

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

Так что рассматривайте это руководство как первый шаг к надежному, завершенному сервису API для нашего приложения.

Создаем API

Создание дерева сервиса API

Building Your Startup - the API tree

Meeting Planner использует Yii Advanced Application framework, который включает дерево папок для фронтэнда приложения и дерева папок для бекэнда для компонента управления, и мы создадим третье дерево для API.

Я описал, как это сделать ранее в программирование с Yii2: создание RESTful API (Envato Tuts +).

Во-первых, я продублировал дерево папок для бекэнда и связанные параметры окружающей среды:

И я добавил псевдоним @api к common/config/bootstrap.php:

Далее мы начнем строить основные функциональные возможности.

Обеспечение безопасности в API

Я создал некоторую базовую безопасность, в то время как мы строим и тестируем приложение iOS. Я  сделаю ее более надежной в будущем.

Всем вызовам API необходимо знать app_id и app_secret. Они будут передаваться в той или иной форме HTTPS. Однако нет никакой гарантии, что мы можем защитить их, поэтому мы должны в конечном итоге разработать приложения устойчивым, если эти ключи обнаружатся.

На данный момент я расширил файл mp.ini в /var/secure который включает:

Затем я создал модель Service.php для управления проверкой этих ключей. Так как мы делаем его более надежным, мне нужно изменить только одну часть кода.

Далее я создал beforeAction во всех контроллерах API для переиспользования метода выше:

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

Регистрация и авторизация

Только два вызова API, которые полностью зависят от ключей API это регистрация и авторизация. Мобильные пользователи могут зарегистрироваться через OAuth и отправить токены их службе OAuth, или они могут обеспечить своим адресом электронной почты непосредственно нас.

После получения, каждому пользователю присваивается уникальный токен, и этот токен обеспечивает будущие вызовы API этого пользователя.

Есть больше пунктов которые мне нужно сделать, чтобы улучшить безопасность, но я не расскажу сегодня что-либо.

Вот исходный код для регистрации пользователя через API и создаем токен:

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

Meeting контроллер

Теперь давайте взглянем на вызовы к определенной области API, запрашивающие информацию о встречах. Здесь начальная часть  /api/controllers/MeetingController.php:

Обратите внимание выше, как каждое действие проверяет правильность токенов.

Затем, каждый вызов API для Meetings идентично построен, как показано ниже (похвалите мою попытку дисциплины):

В настоящее время, каждый вызов включает в себя $app_id, $app_secret и $token для пользователя, вошедшего в систему. Я поменяю это для безопасности в ближайшем будущем. Это безопасно, но сильно.

Давайте посмотрим на actionList, в котором перечислены встречи пользователя, фильтрация по аргументу $status для их фильтрации:

В конце концов API может ограничить количество встреч запрошенных для каждого статуса, т.е. показать самые последние 15 встреч в режиме планирования для этого пользователя.

Все методы Meeting встроены в модель MeetingAPI. Вот код для метода meetinglist():

Во-первых, этот метод проверяет принадлежит ли токен  пользователю:

Вот код для UserToken::lookup():

Затем, мы проверяем фильтр для $status и выбираем пользовательскую $timezone:

И наконец, мы запрашиваем список встреч пользователей и вручную переносим их в массив объектов:

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

Например есть код, в котором Meeting Planner должен генерировать подзаголовки в пользовательском интерфейсе, которые не хранятся в базе данных. Вместо того, чтобы требовать от приложения iOS дублировать этот сложный код, мы просто генерируем подзаголовки и возвращаем его в результатах API.

Делаем вызовы API

Вот предварительный способ сделать и проверить вызовы API. Например, если я сделаю следующий вызов URL:

Это будет работать. Но, для тестирования и просмотра его в действии, я использовал Postaman, расширение для Chrome, которое чрезвычайно полезное.

Вот как вы можете сделать вызовов API с Postman UX:

Building Your Startup - Postman API Requests

И вот как выглядят результаты:

Building Your Startup - Postman API Results

Это простой способ для просмотра необработанных результатов моего сервера разработки, показывающий все мои встречи:

Это все на данный момент. Вы можете просматривать релиз дерева API и просматривать многие другие методы. Как только я обновлю безопасность и улучшу функциональность API, я постараюсь больше писать об этом.

Заглядывая вперед

Я надеюсь, что вам понравилось сегодняшнее руководство. Очевидно, что этот API будет расти и изменяться, вместе с развитием мобильной разработки. Как я уже говорил ранее, я буду улучшать безопасность и расширять функциональность.

Опять же, если вы еще этого не сделали, попробуйте назначить вашу первую встречу в Meeting Planner сейчас!

Вы также можете найти меня по @lookahead_io. Я всегда открыт для новых идей и тем для будущего руководства. Или попробуйте наш helpdesk и откройте отчет об ошибке или  запрос на функцию.

Следите за всеми этими и другими предстоящими руководствами, проверяя цикл Создаем свой стартап с PHP.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.