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 

Подробнее:

[править] Perl

Perl хорошо справляется как с написанием REST-клиентов, так и REST-серверов.

Для написания клиентов лучше всего подходят:

  • LWP::Simple,
  • LWP::UserAgent,
  • WWW::Mechanize,
  • REST::Client.

Для написания серверов:

  • Dancer (очень приятный фреймворк),
  • Mojolicious,
  • CGI::Application,
  • Catalyst

и ряд других (подробнее: [1] Stackoverflow.png).

[править] Python

Python-библиотеки для написания REST-клиентов:

  • Requests (англ.) — HTTP-библиотека для Python; прекрасно подходит для использования в REST-клиентах
  • Siesta (англ.)
  • restkit Github.png (документация: restkit (англ.))

[править] Ruby

  • Grape — простой фреймворк для написания REST-приложений
  • Sinatra — один из основных web-фреймворков Ruby; может использоваться и для чистого REST

Стоит обратить на то, как реализованы маршруты в Sinatra и на их синтаксис, даже если вы не собираетесь писать на Ruby. Синтаксис маршрутов Sinatra используется во многих других фреймворках, вдоховлённых им: например, в express для node.js или compojure для clojre.

[править] JavaScript (Браузер и Node.js)

Как правило, большинство фреймворков имеют готовые механизмы для использования 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:

[править] Scala

  • Lift
  • Unfiltered
  • Spray
  • BlueEyes
  • Play

[править] Clojure

Компоненты для построения собственного REST-фреймворка/сервиса:

  • Compojure
  • Compojure-rest
  • Ring

Подробнее: What is the good starting point to developing RESTful web service in Clojure? Stackoverflow.png.

Простой пример построения REST-сервиса на основе Ring/Compojure:

[править] Erlang


Ошибка цитирования Для существующего тега <ref> не найдено соответствующего тега <references/>
Источник — «http://xgu.ru/wiki/REST»
На других языках