Посты с тэгом rest


[Из песочницы] SOAP и REST сервисы с помощью Python-библиотеки Spyne

Знакомство с библиотекой Spyne


В данной статье я хочу рассказать о замечательной Python-библиотеке Spyne.
Мое знакомство с Spyne началось в тот момент, когда передо мной поставили задачу написать Веб-сервис, который будет принимать и отдавать запросы через SOAP-протокол. Немного погуглив я наткнулся на Spyne, которая является форком библиотеки soaplib. А еще я был удивлен, насколько мало русскоязычной информации встречается о данной библиотеке.

С помощью Spyne можно писать веб-сервисы, которые умеют работать с SOAP, JSON, YAML, а написанный скрипт можно запустить через mod_wsgi Apache. Итак, давайте рассмотрим несколько примеров, напишем работающие скрипты и настроим так, чтобы скрипты работали через apache. Читать дальше →


PyNSK #6 — шестая встреча Новосибирского Python сообщества



Питонисты Новосибирска и ближайших регионов, приглашаем вас на встречу сообщества Python сообщества — PyNSK.

13-го февраля (суббота) состоится шестая встреча. Она пройдет в Культурном Центре «Этаж» и начнется 13-00.

Мы выспались за январь и решили провести встречу! В этот раз будем говорить про RPC и тестирование:
Читать дальше →


PyNSK #5 — пятая встреча Новосибирского Python сообщества




Питонисты Новосибирска, приглашаем вас на встречу сообщества Python сообщества — PyNSK.

12-го декабря (суббота) состоится пятая встреча. Она пройдет в новом для нас месте — Культурный Центр «Этаж» и начнется 13-00.
На встрече вас ждет море общения и 2 доклада:
Узнать о докладах


REST API для Pyramid при помощи Cornice и SACRUD

Mozilla использует в своих проектах Pyramid и у них есть отличный модуль для создания REST API https://cornice.readthedocs.org/en/latest/

REST API обычно меняет, создает и удаляет записи, которые хранятся в БД. Что бы не писать много кода на SQLAlchemy я использую заготовленные функции из sacrud

Итак поехали, представим сервис REST API для платежных карт с моделью типа:

class Card(Base):
__tablename__ = 'card'

id = Column(Integer, primary_key=True)
number = Column(BigInteger, nullable=False, unique=True)
uid = Column(BYTEA, nullable=False, unique=True)
balance = Column(Numeric(10, 2), nullable=False, default=0)
preference = Column(GUID())

def __json__(self):
return {'id': self.id,
'number': self.number,
'uid': str(self.uid),


REST API with Flask

У всех крупных серивисов есть собственные API для разработчиков, с помощью которых можно использовать данные в своих целях. Давайте представим на минутку, что мы огромное хранилище данных и сделаем свое REST API.  Почему REST?

Чтобы не писать “GET /api/v1.0/users fields=id,email,url&offset=100&limit=10&order_by=id” была придумана концепция REST (REpresentational State Transfer). И вся его прелесть заключается в том, что мы будем использовать разные методы HTTP для операций над этими данными. Например:

  • GET - для получения данных от сервера;
  • POST - для передачи данных на сервер;
  • DELETE - для удаления ресурса на сервере.

Ладно, с теорией мы разобрались, поэтому давайте перейдем к практике и напишем сервер на микрофре



Pylons + FormAlchemy REST Controller

Для своих REST контроллеров можно использовать, формы FormAlchemy.
Создаем контроллер:

yourproj% paster restcontroller comment comments
Creating yourproj/yourproj/controllers/comments.py
Creating yourproj/yourproj/tests/functional/test_comments.py
Или если нужно в отдельной директории
yourproj% paster restcontroller admin/tracback admin/trackbacks
Creating yourproj/controllers/admin
Creating yourproj/yourproj/controllers/admin/trackbacks.py
Creating yourproj/yourproj/tests/functional/test_admin_trackbacks.py

В файле нашего REST контроллера добавим
from formalchemy.ext.pylons.controller import RESTController

И в конце файла обернем его так
# wrap with formalchemy RESTController
CommentsController = RESTController(CommentsController, 'comment', 'comments')

Теперь если закомментировать какой-нибудь из стандартных методов в контроллере(index, new, update,


Pylons + FormAlchemy REST Controller


Для своих REST контроллеров можно использовать, формы FormAlchemy.
Создаем контроллер:
yourproj% paster restcontroller comment comments
Creating yourproj/yourproj/controllers/comments.py
Creating yourproj/yourproj/tests/functional/test_comments.py
Или если нужно в отдельной директории
yourproj% paster restcontroller admin/tracback admin/trackbacks
Creating yourproj/controllers/admin
Creating yourproj/yourproj/controllers/admin/trackbacks.py
Creating yourproj/yourproj/tests/functional/test_admin_trackbacks.py

В файле нашего REST контроллера добавим
from formalchemy.ext.pylons.controller impor


SmartGwt + Django = REST

Этот пост будет просто рассуждением. Точнее даже, рассказом о личных выводах. Так вот, в прошлом я связывал django и gwt с помощью json-rpc. Это полезная вещь в целом, но очень трудоемкая для комплексного подхода к приложениям на SmartGWT, в котором уже есть класс DataSource, и более удобный вариант RestDataSource. В нем уже заложены такие возможности, как передача данных в форматах XML, JSON через HTTP, гибкая поддержка REST идеологии (GET, PUT, POST и DELETE), поддерживает пагинацию, поиск, сортировку и другое. Что это значит? Первое, используя REST - создается некая стандартизация запросов (собственно идеология REST), в отличии от JSON-RPC. Создавая REST поддержку на сервере, мы одновременно создаем API нашего сайта. Второе, нам не надо для каждого UI элемента прописывать сво