Pull to refresh

API для сайта, хватит изобретать велосипед!

Reading time2 min
Views36K
Поступила задача – создать API для сайта scribbler.ru, которое позволило бы сторонним разработчикам работать с ресурсами сайта, писать приложения как внутри, в виде swf файла, так и находящиеся вне сайта, допустим десктопное приложение, которое может получать/отправлять почту пользователям сайта.

Всем известно, что популярные российские проекты (vkontakte.ru, mail.ru и какие-либо другие) имеют свой API. Для примера я начал было их осваивать и смотреть, как же они реализованы, и знаете что, каждый сайт пишет API так, как ему вздумается (как разработчики считают правильным), т.е. API mail.ru и vkontakte.ru сильно разнятся в своих архитектурах, грубо говоря они не схожи, что, я думаю, усложняет жизнь разработчикам, сперва пишем свои классы, работающие с API, под vkontake, потом пишем свои классы под mail.ru и т.д.

Возник вопрос: «А как же решили эту задачу «забугорные» сайты?»


Идем на twitter.com, заходим в раздел «API», смотрим, читаем и видим «The Twitter API attempts to conform to the design principles of Representational State Transfer (REST)».

Идем на facebook.com, заходим в раздел «Разработчики->documentation» и снова видим «The API uses a REST-like interface».

Да блин! Что же такое этот REST?

И вот оно! REST описывает архитектуру парадигмы для web—приложений, которые запрашивают и манипулируют web—ресурсами, используя стандартные HTTP методы GET, POST, PUT и DELETE.

Все мы знаем, что такое SOAP сервис, так REST это нечто похожее, только проще ;).

Благодаря REST мы можем обращаться к методам объектов нашего сайта, передавая параметры методами GET и POST и получая в ответ от сервера XML. Т.е., допустим, нам нужно получить информацию о пользователе, тогда мы идем по адресу .../api/user.getInfo?userId=10, в ответ нам придет XML с информацией о нем, в этом адресе наглядно видно, что мы обращаемся к объекту user и выполняем его метод getInfo, входным параметром будет userId=10, в PHP это выглядело бы так $user->getInfo(10).

Просто? Удобно? Еще как!

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

Итак, представим себе, что объекты API хранятся в своей папочке внутри проекта, и какой-либо разработчик обращается по адресу .../api/user.getInfo, тут врубается apiController, начинает проверять, существует ли объект user с методом getInfo, если нет, то возвращает XML со статусом ошибки, если да, то создает этот объект, вызывает нужный метод, конвертит возвращенные данные в XML и выводит в view.

Пошагово все это будет выглядеть так:

REST MVC cheme

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

В следующий раз продолжим беседу об OAuth авторизации, которая позволяет не вводить логин и пароль пользователя, для использования API.

Итак, теперь, сайт scribbler.ru имеет свой API, и если есть желающие опробовать его в действии, то «Welcome!», объективную критику и ценные пожелания расцениваем на отличненько!

Документацию по API можно прочитать здесь scribbler.ru/developers.

P.S. Старался писать как можно понятнее, история про разработку придумана и основана на реальных событиях ;)
Tags:
Hubs:
+38
Comments58

Articles

Change theme settings

Information

Website
www.badabumedia.ru
Registered
Founded
2006
Employees
11–30 employees
Location
Россия