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

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

82 голосов
/ 11 февраля 2011

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

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

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

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

Ответы [ 10 ]

42 голосов
/ 13 марта 2011

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

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

со ссылкой на исходный код внизу статьи.

8 голосов
/ 12 ноября 2014

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Поскольку этот ответ был опущен из-за того, что он не указал причину выбораRuby on Rails, а также никаких инструкций по написанию API-интерфейса REST. Я подумал, что дам вам мотивацию и несколько простых инструкций.

Я начал читать книгу о Ruby on Rails и понял, что всемне нужно было использовать scaffolding, и я получил 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, но это выходит за рамки этого вопроса.

8 голосов
/ 11 февраля 2011

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

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

3 голосов
/ 11 февраля 2011

А как насчет Python?

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

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

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

2 голосов
/ 29 августа 2012

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

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

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

1 голос
/ 11 февраля 2011

Извлеките следующий класс PHP, следующий за MVC.http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

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

0 голосов
/ 14 октября 2011

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

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

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

0 голосов
/ 11 февраля 2011

Если вы уже знаете PHP, с бэкэндом PHP / MySQL все в порядке. Вы можете отправить все ответы в формате xml, совместимом с iPhone, и мгновенно превратить ответ в структуру данных 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 /

0 голосов
/ 11 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...