примеры - веб сервис на python




Рекомендации Python REST(веб-сервисы)? (11)

В 2010 году сообщества Pylons и repoze.bfg «объединили свои силы» для создания Pyramid , веб-платформы, основанной в основном на repoze.bfg. Он сохраняет философию своих родительских структур и может использоваться для служб RESTful . Это стоит посмотреть.

Есть ли список где-нибудь из рекомендаций разных REST-инфраструктур на основе Python для использования на сервере, чтобы написать свои собственные API RESTful? Предпочтительно с плюсами и минусами.

Пожалуйста, не стесняйтесь добавлять рекомендации здесь. :)



Кажется, что все виды веб-фреймворков python могут реализовывать интерфейсы RESTful.

Для Django, помимо тастипии и поршня, django-rest-framework является многообещающим, заслуживающим упоминания. Я уже платил один из моих проектов.

Структура Django REST - это легкая структура REST для Django, которая позволяет легко создавать хорошо связанные, самоописывающиеся веб-интерфейсы RESTful.

Быстрый пример:

from django.conf.urls.defaults import patterns, url
from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from myapp.models import MyModel

class MyResource(ModelResource):
    model = MyModel

urlpatterns = patterns('',
    url(r'^$', ListOrCreateModelView.as_view(resource=MyResource)),
    url(r'^(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyResource)),
)

Возьмем пример с официального сайта, все вышеперечисленные коды предоставляют api, сам объясненный документ (например, веб-сервис с мылом) и даже песочницу для тестирования. Очень удобно.

Ссылки: http://django-rest-framework.org/


Мне очень нравится CherryPy . Вот пример спокойной веб-службы:

import cherrypy
from cherrypy import expose

class Converter:
    @expose
    def index(self):
        return "Hello World!"

    @expose
    def fahr_to_celc(self, degrees):
        temp = (float(degrees) - 32) * 5 / 9
        return "%.01f" % temp

    @expose
    def celc_to_fahr(self, degrees):
        temp = float(degrees) * 9 / 5 + 32
        return "%.01f" % temp

cherrypy.quickstart(Converter())

Это подчеркивает то, что мне действительно нравится в CherryPy; это полностью рабочий пример, который очень понятен даже тем, кто не знает рамки. Если вы запустите этот код, вы можете сразу увидеть результаты в своем веб-браузере; например, посещение http://localhost:8080/celc_to_fahr?degrees=50 отобразит 122.0 в вашем веб-браузере.


Мы работаем над структурой для строгих служб REST, ознакомьтесь с http://prestans.googlecode.com

На раннем этапе Alpha мы тестируем mod_wsgi и AppEngine от Google.

Поиск тестеров и отзывов. Благодарю.


См. Вики-страницу Python Web Framework .

Вероятно, вам не нужны полные фреймворки стека , но оставшийся список все еще довольно длинный.


Что-то, чтобы быть осторожным при разработке RESTful API, - это объединение GET и POST, как будто это одно и то же. Легко сделать эту ошибку с помощью функций, основанных на функциях Django и диспетчера по умолчанию CherryPy , хотя обе структуры теперь обеспечивают способ решения этой проблемы ( представления на основе MethodDispatcher и MethodDispatcher , соответственно).

HTTP-глаголы очень важны в REST, и если вы не будете очень осторожны в этом, вы попадете в анти-шаблон REST .

Некоторые фреймворки, которые это правильно, - web.py , flask и Bottle . В сочетании с библиотекой mimerender (полное раскрытие: я написал ее), они позволяют писать хорошие веб-службы RESTful:

import web
import json
from mimerender import mimerender

render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message

urls = (
    '/(.*)', 'greet'
)
app = web.application(urls, globals())

class greet:
    @mimerender(
        default = 'html',
        html = render_html,
        xml  = render_xml,
        json = render_json,
        txt  = render_txt
    )
    def GET(self, name):
        if not name: 
            name = 'world'
        return {'message': 'Hello, ' + name + '!'}

if __name__ == "__main__":
    app.run()

Логика службы реализована только один раз, и правильный выбор представления (заголовок Accept) + отправка в надлежащую функцию рендеринга (или шаблон) выполняется аккуратным, прозрачным способом.

$ curl localhost:8080/x
<html><body>Hello, x!</body></html>

$ curl -H "Accept: application/html" localhost:8080/x
<html><body>Hello, x!</body></html>

$ curl -H "Accept: application/xml" localhost:8080/x
<message>Hello, x!</message>

$ curl -H "Accept: application/json" localhost:8080/x
{'message':'Hello, x!'}

$ curl -H "Accept: text/plain" localhost:8080/x
Hello, x!

Обновление (апрель 2012) : добавлена ​​информация о представлениях класса Django, интерфейсах меток MethodDispatcher и Flask и Bottle от CherryPy. Когда вопрос был задан, он не существовал.


Я использую Django, тогда вы можете рассмотреть django-tastypie как альтернативу django-piston . Легче настраивать источники данных, отличных от ORM, чем поршень, и имеет отличную documentation .


Я не вижу причин использовать Django, чтобы разоблачить REST api, есть более легкие и гибкие решения. Django несет в себе много других вещей, которые не всегда нужны. Конечно, не нужно, если вы хотите показать какой-либо код в качестве службы REST.

Мой личный опыт, fwiw, заключается в том, что, когда у вас есть единая платформа для всех, вы начнете использовать ее ORM, его плагины и т. Д. Только потому, что это легко, и в мгновение ока у вас есть зависимость от которого очень трудно избавиться.

Выбор веб-фреймворка - это сложное решение, и я бы избегал выбора полного решения стека, чтобы разоблачить REST api.

Теперь, если вам действительно нужно / нужно использовать Django, то Piston - хорошая структура REST для приложений django.

Тем не менее, CherryPy выглядит очень хорошо, но кажется более RPC, чем REST.

Глядя на образцы (я никогда не использовал его), возможно, web.py является лучшим и чистым, если вам нужен только REST.


Я не эксперт в мире python, но я использую Django который является отличной веб-картой и может использоваться для создания спокойной структуры.


web2py включает поддержку для легкого создания API RESTful, описанного here и here (видео). В частности, посмотрите на parse_as_rest , который позволяет вам определять шаблоны URL, которые сопоставляют запросы args с запросами базы данных; и smart_query , что позволяет передавать произвольные запросы на естественный язык в URL-адресе.







frameworks