Сегодня речь пойдёт о веб-сервисах на django. Для начала определим сам термин. Веб-cервис (англ. web service) — идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (XML, JSON и т. д.). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения. (Данное определение взято свикипедии)
Прежде чем говорить об использовании сервисов, рассмотрим некоторые из преимуществ их использования:
- Если ваш сервис был выложен в сети, другие приложения смогут использовать его возможности:
- Веб-сервисы позволяют взаимодействовать приложениям, созданным на различных платформах и технологиях (например, сервис на c# может спокойно взаимодействовать с сервисом на java):
- Веб-сервисы используют стандартизированные протоколы для общения. Все 4 слоя (сервис транспортировки, сообщения XML, описание сервисов и уровни обнаружения сервисов) используют один определённый протокол из тех, что используют веб-сервисы. Эта стандартизация протоколов по группам даёт бизнесу множество преимуществ, таких как широта выбора, уменьшение стоимости вследствие конкуренции и увеличение качества.
Это далеко не все преимущества данного подхода, однако и этой информации достаточно чтобы понять актуальность данной темы и хотя бы в общих чертах рассмотреть, как реализуются веб-сервисы.
В этой статье я рассмотрю два подхода к созданию сервисов: rest и xml-rpc. Это связано с простотой использования данных подходов в django, и лучше всего подойдёт для начинающих. В данной статье не будет подробно описаны все тонкости использования rest и xml-rpc, это всё есть в документации, мы только рассмотрим небольшие примеры использования.
Начнём с rest. REST (сокр. англ. Representational State Transfer, «передача состояния представления») — подход к архитектуре сетевых протоколов, обеспечивающих доступ к информационным ресурсам. В REST-сервисах акцент сделан на доступ к ресурсам, а не на исполнение удаленных сервисов. Например, вместо того чтобы запрашивать удаленное исполнение функции для нахождения нужного вам формуляра заказа, вы просто запрашиваете этот формуляр, примерно так же, как статичную Web-страницу.
На мой взгляд, наиболее простым и удобным инструментом для работы с rest в django является django-piston. Так же вы можете посмотреть в сторону Django Tastypie и Django REST framework.
Устанавливаем piston как описано в документации.
В INSTALLED_APPS добавляем 'piston'.
В корне проекта создадим директорию api (обязательно создаём файл init.py). В этой же директории создадим файл handlers.py, в котором описываются интерфейсы работы с ресурсом, т.е. все манипуляции (CRUD) с нашей моделью.
Для примера в model создадим класс Book, с которым будем работать:
class Book(models.Model): title = models.CharField(, max_length=120) slug = models.CharField(max_length=50) description = models.TextField() def __unicode__(self): return self.title
Чтобы было проще тестировать забейте несколько книг в базу.
Теперь вернёмся к нашему файлу handlers.py.
from piston.handler import BaseHandler from app.models import Book class BookHandler(BaseHandler): model = Book fields = ('id', 'title',)
В директории api создадим еще один файл - urls.py.
from django.conf.urls.defaults import * from piston.resource import Resource from api.handlers import FilmHandler film_resource = Resource(FilmHandler) urlpatterns = patterns('', url(r'^book/(?P\d+)/$', film_resource), url(r'^book/$', film_resource), )
В urls.py проекта добавим ссылку на urls.py из api:
urlpatterns = patterns('', ... (r'^api/', include('api.urls')), )
Теперь мы можем получить книги в формате json по адресуhttp://127.0.0.1:8000/api/books/:
[ { "id": 1, "title": "Math" }, { "id": 2, "title": "Math1" } ]
Так же piston берёт на себя всю работу по удалению, обновлению и добавлению данных, а так же многое другое. Подробнее об этом читайте в документации.
Теперь поговорим об xml-rpc. XML-RPC (сокр. от англ. Extensible Markup Language Remote Procedure Call — XML-вызов удалённых процедур) — стандарт/протокол вызова удалённых процедур, использующий XML для кодирования своих сообщений и HTTP в качестве транспортного механизма. Является прародителем SOAP, отличается исключительной простотой применения. XML-RPC, как и любой другой интерфейс RPC, определяет набор стандартных типов данных и команд, которые программист может использовать для доступа к функциональности другой программы, находящейся на другом компьютере в сети.
Для работы с этим протоколом в django ставим django-xmlrpc и добавляем в INSTALLED_APPS ' django_xmlrpc'.
Для проверки работоспособности во views.py добавим функцию:
def multiply(a, b): return a*b
В settings.py:
XMLRPC_METHODS = (('app.views.multiply', 'mult'), )
В urls.py:
url(r'^xmlrpc/$', 'django_xmlrpc.views.handle_xmlrpc', name='xmlrpc'),
Теперь осталось написать клиента, который будет вызывать данную функцию и получать результаты её работы.
Клиент может выглядеть так:
import xmlrpclib proxy = xmlrpclib.ServerProxy("http://localhost:8000/xmlrpc/") rez = proxy.postsMet(2,5) print rez >>> 10 >>>
На этом мы закончим рассмотрение способов создания сервисов на django. Надеюсь, это статья будет вам полезной.
0 коммент.:
Отправить комментарий