Як написати REST API?


82

Я пишу додаток для iPhone як хобі-проект, і йому знадобиться веб-служба, щоб надати йому дані. Це не сильно відрізняється від того, що я роблю на роботі, але на роботі я пишу лише перегляди та контролери. Хтось інший відповідає за написання моделі, і зазвичай клієнти надають веб-послугу.

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

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

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


1
REST, мабуть, не те, що ви насправді хочете: medium.com/@trevorhreed/…
Тревор,

2
Ви можете використати цей сценарій PHP на 66 рядків, який я написав.
mevdschee

Відповів 5 років потому 8-)
JustOnUnderMillions

Відповіді:


42

РЕДАГУВАТИ:

Посилання нижче, які, мабуть, були хорошими протягом 3 років, більше не працюють, тому я пішов і знайшов кілька нових навчальних посібників, які, на мою думку, залишаться на деякий час. Вони є на сайті Ray Wenderlich, дуже шанованому веб-сайті з підручників для розробників ios. Перша стаття насправді посилається на непрацюючі посилання нижче, але вона повна сама по собі:

Як написати простий веб-сервіс 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/

із посиланням на вихідний код внизу статті.


2
Здається, ці посилання зараз закінчуються. Якщо це відбувається з кимось іншим, я не впевнений. : /
Огі Гарднер

8

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

EDIT: Здається, офіційної документації щодо Zend_Rest_Controller. Це посилання описує, як використовувати його для створення API. Вам просто потрібно вимкнути візуалізацію у init()своєму підкласі та застосувати методи для кожного виклику REST.


Я не бачу жодного ZEND_Rest_Controller на сайті Zend. Я бачу ZEND_Rest_Server. Це той, про кого ти говориш?
Дмитро

2
Подивіться тут, щоб добре розпочати, як користуватися zend_rest_controller: techchorus.net/create-restful-applications-using-zend-framework. Створення API для відпочинку з цим класом без зусиль
Філіпп,

Здається, це більш-менш саме те, що мені потрібно. Я спробую це, і якщо мені вдасться, я прийму це як свою відповідь. Дякую.
Ерік Б,

4
Я думаю, він не мав успіху ...: D
user151841

8

Просто, щоб повідомити:

У підсумку я використав 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, але це поза контекстом цього питання.


10
давши собі відповідь, а потім поставивши йому галочку погана форма людина ДУЖЕ погана форма.
thenetimp

29
@thenetimp Немає нічого поганого у відповіді на власне запитання. Насправді це заохочується, якщо це правильна відповідь і її не дав ніхто інший. Ви не отримуєте жодного представника за прийняття власної відповіді, тому я справді не розумію, що ви могли б мати проти цього.
Ерік Б

3
було б краще, якби ви аргументували свій вибір
мустафа

4
@Nate, я б порекомендував Ruby on Rails кожному, хто хоче написати REST API, тому я не буду видаляти свою відповідь. Однак я прочитав ваші відгуки та оновив свою відповідь. Сподіваюся, це вас порадує.
Ерік Б,

2
@ DennisKrøger, якщо запитання: "Як написати REST api?" тоді "Я використав RoR. Ось посібник для початку роботи з їх лісами" - це цілком правильна відповідь.
Mattygabe

8

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

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

Основна концепція включає:

  • один абстрактний клас, який обробляє синтаксичний аналіз URI та повернення відповіді, та
  • один конкретний клас, який складається лише з кінцевих точок для API.

3

Як щодо Python?

Я б використовував Python, Django та Piston.

  1. Я б створив моделі Django з існуючої БД, використовуючи inspectdb .
  2. Додайте адміністратора Django до своїх моделей.
  3. Додайте Django Piston у свій додаток.
  4. Прибуток.

Не маючи досвіду роботи з Python або Django, ймовірно, вам знадобиться день, щоб розробити це рішення, і весь код є модульним тестуванням і доведено, що він працює .



1

Перевірте наступний клас PHP, який слідує за MVC. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

Сподіваюся, це допомагає.


7
Я настійно не рекомендую використовувати що- небудь з phpclasses.org. Багато занять на цьому сайті неперевірені, незахищені, написані сценаріями. Подивіться десь більш поважно, як ГРУША чи Зенд
Дмитро

13
Понад 3000 розробників PHP надіслали пакети на сайт PHPClasses. Деякі набагато здатніші за інших. Багато хто навіть є авторами PEAR та Zend. Сказати людям не використовувати пакет, що розповсюджується на цьому веб-сайті, лише тому, що ви знайшли деякі пакети, які, на вашу думку, є неперевіреними та небезпечними, є чистим упередженням. Пакет, рекомендований @src, є найкращим пакетом. Було б розумніше, якби ви подивились на код пакета або принаймні рейтинги користувачів, перш ніж вирішити узагальнити все, лише тому, що він розповсюджується на сайті.
mlemos

0

Якщо ви вже знаєте PHP, у серверній базі PHP / MySQL немає нічого поганого. Ви можете надіслати всі відповіді у сумісному з iPhone форматі 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/


0

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

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

Що стосується надсилання запитів на пристрій iOS, я пропоную використовувати ASIHTTPRequest .


0

Інший варіант - restSQL, надлегка структура стійкості. Див. Http://restsql.org . Він підтримує MySQL та PostgreSQL та працює у стандартному контейнері Java EE, наприклад Apache Tomcat.

restSQL - це дуже нетрадиційний рівень доступу до даних. restSQL не є об’єктно-орієнтованим видом бази даних. Він представляє плоскі або ієрархічні "подання" реляційних таблиць баз даних. Ці подання можна запитувати та оновлювати за допомогою простого API на основі HTTP або Java на основі REST. Інтерфейс HTTP базується на принципах REST, які використовують вбудовані функції HTTP, а не абстрагуються від них.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.