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/>