REST
Материал из Xgu.ru
Содержание |
[править] Пример REST-клиента
import json import urllib2 data = {'a':10, 'b':20, 's': 'xyz'} data = json.dumps(data) url = "http://rest-api-provider.com/api/v1" req = urllib2.Request(url, data, {'Content-Type': 'application/json'}) f = urllib2.urlopen(req) response = f.read() f.close()
Использование PUT в urllib2:
import urllib2 opener = urllib2.build_opener(urllib2.HTTPHandler) request = urllib2.Request('http://rest-api-provider.com/api/v1', data='your_put_data') request.add_header('Content-Type', 'your/contenttype') request.get_method = lambda: 'PUT' url = opener.open(request)
Учтите, что REST-клиенты на Python'е намного проще писать, используя библиотеку requests. Тот же самый код:
data = {'a':10, 'b':20, 's': 'xyz'} r = requests.get('http://rest-api-provider.com/api/v1', params=data)
[править] Дополнительная информация
- How I Explained REST to My Wife (англ.) — оригинальную запись чуваку пришлось удалить, но копия жива
[править] Shell
Из оболочки командного интерпретатора взаимодействие с REST-сервером можно выполнять с помощью curl:
$ curl -i -H "Accept: application/json" -X POST -d "firstName=james" http://192.168.0.165/persons/person
Подробнее:
- REST-esting with cURL (англ.)
- Using the REST API with cURL (англ.)
[править] Perl
Perl хорошо справляется как с написанием REST-клиентов, так и REST-серверов.
Для написания клиентов лучше всего подходят:
- LWP::Simple,
- LWP::UserAgent,
- WWW::Mechanize,
- REST::Client.
Для написания серверов:
- Dancer (очень приятный фреймворк),
- Mojolicious,
- CGI::Application,
- Catalyst
и ряд других (подробнее: [1] ).
[править] Python
- Communicating with RESTful APIs in Python (англ.) — пример простейшего REST-клиента на Python
- Web Service REST calls with Python (англ.) — более развёрнутый пример
- Recommendations of Python REST (web services) framework?
- http://django-rest-framework.org/ (англ.) — один из двух главных REST-фреймворков для Django
- Designing a RESTful API with Python and Flask (англ.) — создание REST-приложения с помощью Flask; очень хорошее руководство; питонистам, возможно, стоит начинать изучение REST с него
Python-библиотеки для написания REST-клиентов:
- Requests (англ.) — HTTP-библиотека для Python; прекрасно подходит для использования в REST-клиентах
- Siesta (англ.)
- restkit (документация: restkit (англ.))
[править] Ruby
- Grape — простой фреймворк для написания REST-приложений
- Sinatra — один из основных web-фреймворков Ruby; может использоваться и для чистого REST
Стоит обратить на то, как реализованы маршруты в Sinatra и на их синтаксис, даже если вы не собираетесь писать на Ruby. Синтаксис маршрутов Sinatra используется во многих других фреймворках, вдоховлённых им: например, в express для node.js или compojure для clojre.
[править] JavaScript (Браузер и Node.js)
- Node.js REST framework?
- Creating a REST API using Node.js, Express, and MongoDB (англ.)
- NodeCellar: Sample Application with Backbone.js, Twitter Bootstrap, Node.js, Express, and MongoDB (англ.) — продолжение предыдущего примера, клиентская часть приложения
Как правило, большинство фреймворков имеют готовые механизмы для использования REST. Так, например:
- AngularJS — $resource;
- ...
Пример использования `$resource`[1]:
var User = $resource('/api/v1/user/:userId', {userId:'@id'}); var user = User.get({userId:123}, function() { user.name = 'Gonto'; user.$save(); }); var Car = $resource('/api/v1/user/:userId/cars/:carId', {userId:123, carId:'@id'}); var cars = Car.query(function() { var firstCar = cars[0]; firstCar.name = "Honda Fit"; firstCar.$save(); });
Кроме того, есть специально заточенные библиотеки:
Приведённый выше пример, но на Restangular:
RestangularProvider.setBaseUrl('/api/v1') Restangular.one('user', 123).get().then(function(user) { $scope.user = user; user.name = 'Gonto'; user.put(); }); $scope.user.getList('cars').then(function(cars) { var firstCar = cars[0]; firstCar.name = "Honda Fit"; firstCar.put(); cars.post({name: 'New Model Extra Cool'}); });
Ещё немного на тему сравнения Restangular с $resource из Angular:
- Restangular on Angular (англ.)
[править] Scala
- Lift
- Unfiltered
- Spray
- BlueEyes
- Play
[править] Clojure
- liberator (англ.)
Компоненты для построения собственного REST-фреймворка/сервиса:
- Compojure
- Compojure-rest
- Ring
Подробнее: What is the good starting point to developing RESTful web service in Clojure? .
Простой пример построения REST-сервиса на основе Ring/Compojure:
[править] Erlang
Ошибка цитирования Для существующего тега
<ref>
не найдено соответствующего тега <references/>