Как написать REST API?

Я пишу приложение для iPhone в качестве проекта хобби, и ему понадобится веб-сервис, чтобы предоставить ему данные. Это не очень отличается от того, что я делаю на работе, но на работе я только пишу виды и контроллеры. Кто-то другой отвечает за запись модели, и обычно клиенты предоставляют веб-сервис.

Я проработал некоторое веб-программирование раньше, когда все использовали MySQL и PHP, поэтому мои навыки немного устарели, но я уверен, что смогу вытащить его из тех методов, которые я уже знаю. Однако я не хочу тратить свое время на использование устаревших инструментов. Я понял, что современное состояние – это написать REST API. Я думал, что там должны быть довольно хорошие рамки, которые в значительной степени просто дают вам REST API с функциональностью CRUD, как только вы определили модель.

Я предполагаю, что мой вопрос: каким будет самый быстрый способ запустить REST API? Я просто хочу сосредоточиться на написании приложения для iPhone и не тратить слишком много времени на этот API. Было бы здорово, если бы я мог получить веб-администрирование и историю изменений. Я также должен добавить, что API не должен быть общедоступным, поэтому поддержка аутентификации также будет отличной.

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

РЕДАКТИРОВАТЬ:

Ссылки ниже, которые, по-видимому, были хорошими в течение 3 лет, больше не работают, поэтому я пошел и нашел пару новых учебников, которые, как я думаю, будут придерживаться какое-то время. Они находятся на сайте Ray Wenderlich, очень уважаемом сайте ios dev. Первая статья на самом деле ссылается на неработающие ссылки ниже, но она полна сама по себе:

Как написать простой веб-сервис PHP / MySQL для приложения iOS

и второй имеет немного поворот к нему. Он использовал parse.com на бэкэнд и AFNetworking. Оба они превосходны.

Как синхронизировать основные данные с веб-службой – часть 1


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


Я делаю то же самое с моим iphone-приложением. Я нашел эту статью о создании RESTful API в PHP:

https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

и здесь также есть следующая статья:

https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/

со ссылкой на исходный код в нижней части статьи.

Я запрограммировал REST API в ZEND Framework с помощью Zend_Rest_Controller, на iPhone я использовал ASIHTTPRequest . Мой опыт с обоими хорошими. В начале у меня возникли проблемы с настройкой ZEND и подключением к mySQL, но как только я понял, как это сделать, я смог быстро написать API. Я могу поделиться с вами дополнительной информацией, если у вас возникнут дополнительные вопросы.

EDIT: Кажется, нет официальной документации по Zend_Rest_Controller . Эта ссылка описывает, как использовать ее для создания вашего API. Вам просто нужно отключить рендеринг в init() вашего подкласса и реализовать методы для каждого вызова REST.

Просто что бы ты знал:

Я закончил использование Ruby on Rails.

EDIT: поскольку этот ответ был подавлен для того, чтобы не объяснять причину выбора Ruby on Rails, а также никаких инструкций о том, как писать с ним REST API, я думал, что дам вам мотивы и некоторые простые инструкции.

Я начал читать книгу о Ruby on Rails и понял, что все, что мне нужно было сделать, это использовать строительные леса, и я бесплатно получил JSON REST API.

Вот хорошее руководство, чтобы начать работу: http://guides.rubyonrails.org/getting_started.html

Когда у вас запущена и запущена среда Ruby on Rails, создание REST API не сложнее, чем запуск:

 $ rails generate scaffold Post name:string title:string content:text 

(Пример из приведенной выше ссылки.) Я также обнаружил, что Rails очень легко и свободно развертывается в heroku , а это значит, что мне не нужно было платить за хостинг для моего самого простого, низкого трафика, REST API. Есть много других причин, почему я очень рад работать с Ruby on Rails, но это выходит за рамки этого вопроса.

Я выполнил довольно простой учебник по созданию RESTful API с PHP:

Corey Maynard – создание RESTful API с PHP

Основная концепция включает:

  • один абстрактный класс, который обрабатывает разбор URI и возвращает ответ, и
  • один конкретный класс, состоящий только из конечных точек API.

Как насчет Python?

Я бы использовал Python, Django и Piston.

  1. Я бы сгенерировал модели Django из существующей базы данных с помощью inspectdb .
  2. Добавьте администратора Django в свои модели.
  3. Добавьте Django Piston в ваше приложение.
  4. Прибыль.

Не имея опыта работы с Python или Django, возможно, вам понадобится один день для разработки этого решения, и весь код будет проверен и проверен на работоспособность .

Если вы хотите использовать PHP, я рекомендую использовать схему CodeIgniter с REST-сервером Phil Sturgeon:

http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2

https://github.com/philsturgeon/codeigniter-restserver

Ознакомьтесь с следующим классом PHP, который следует за MVC. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

Надеюсь это поможет.

Если вы уже знаете PHP, в PHP / MySQL нет ничего плохого. Вы можете отправлять все ответы в формате XML plist xml и мгновенно превращать ответ в структуру данных NSDictionary / NSArray / NSNumber с помощью этого короткого фрагмента кода:

 NSString *response = [request responseString]; NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding]; NSPropertyListFormat format; NSString *errorStr; NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr]; 

Я также использую пакет ASIHTTP для формирования URL-адресов, отправки асинхронных запросов и получения ответов, я настоятельно рекомендую:

http://allseeing-i.com/ASIHTTPRequest/

Вы должны использовать любые языки, которые вам удобны для веб-службы. Любой язык, который может формулировать ответы REST на запросы, прекрасен.

Тем не менее, если вы хотите быстро запустить что-то, я предлагаю использовать Python в Google App Engine. Это бесплатно, и вы можете использовать Java вместо Python, если хотите. App Engine поддерживает аутентификацию с помощью OpenID и / или учетных записей Google (не уверен, что они являются взаимоисключающими), чтобы сделать код проще.

Что касается запросов на устройстве iOS, я предлагаю использовать ASIHTTPRequest .

Другим вариантом является restSQL, ультралегкая структура сохранения. См. http://restsql.org . Он поддерживает MySQL и PostgreSQL и работает в стандартном контейнере Java EE, например Apache Tomcat.

restSQL – очень нетрадиционный уровень доступа к данным. restSQL не является объектно-ориентированным представлением базы данных. Он представляет собой плоские или иерархические «представления» реляционных таблиц базы данных. Эти представления доступны для запросов и могут быть обновлены с помощью простого HTTP или Java API на основе REST. Интерфейс HTTP основан на принципах REST, которые используют встроенные функции HTTP, а не абстрагируются от них.

Вам нужен «REST API с функциональностью CRUD», и это именно то, что нравится restSQL. Вы можете сделать это без кода. Просто определите свои ресурсы SQL через файлы XML и начните выполнять HTTP-вызовы против них с полной возможностью CRUD.