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

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

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

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

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

Ответ 1

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

В итоге я использовал Ruby on Rails.

РЕДАКТИРОВАТЬ:. Поскольку этот ответ был занижен для того, чтобы не объяснять причину выбора 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, но это выходит за рамки этого вопроса.

Ответ 2

EDIT:

Ссылки, которые, по-видимому, были хорошими в течение 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/

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

Ответ 3

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

РЕДАКТИРОВАТЬ: Как представляется, официальная документация на Zend_Rest_Controller отсутствует. Эта ссылка описывает, как использовать ее для создания вашего API. Вам просто нужно отключить рендеринг в init() вашего подкласса и реализовать методы для каждого вызова REST.

Ответ 4

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

Кори Мейнард - Создание RESTful API с PHP

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

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

Ответ 5

Как насчет Python?

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

  • Я бы создал модели Django из вашего существующий DB с использованием inspectdb.
  • Добавьте Django admin в свои модели.
  • Добавьте Django Piston в ваше приложение.
  • Profit.

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

Ответ 8

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

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

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

Ответ 9

Если вы уже знаете 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/

Ответ 10

Другим вариантом является 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.