Есть ли где-то список рекомендаций различных основанных на Python сред REST для использования на стороне сервера для написания собственных API RESTful? Желательно с плюсами и минусами.
Пожалуйста, не стесняйтесь добавлять рекомендации здесь. :)
python
web-services
rest
frameworks
Дарий
источник
источник
Ответы:
При разработке RESTful API следует соблюдать осторожность при сопоставлении GET и POST, как если бы они были одним и тем же. Эту ошибку легко совершить с помощью представлений Django на основе функций и диспетчера CherryPy по умолчанию, хотя обе платформы теперь позволяют обойти эту проблему ( представления на основе классов и MethodDispatcher соответственно).
HTTP-глаголы очень важны в REST, и если вы не будете очень осторожны с этим, вы в конечном итоге попадете в анти-шаблон REST .
Некоторые рамки, которые понимают это правильно, - это web.py , Flask и Bottle . В сочетании с библиотекой mimerender (полное раскрытие: я ее написал) они позволяют вам писать хорошие веб-сервисы RESTful:
Логика сервиса реализуется только один раз, и правильный выбор представления (заголовок Accept) + отправка в соответствующую функцию рендеринга (или шаблон) выполняется аккуратно и прозрачно.
Обновление (апрель 2012 г.) : добавлена информация об основанных на классах представлениях Django, структурах CherryPy MethodDispatcher и Flask and Bottle. Ни один не существовал назад, когда вопрос был задан.
источник
Удивлен никто не упомянул колбу .
источник
Мы используем Django для веб-сервисов RESTful.
Обратите внимание, что - из коробки - у Django не было достаточно тонкой аутентификации для наших нужд. Мы использовали интерфейс Django-REST , который очень помог. [С тех пор мы сделали свой собственный проект, потому что сделали так много расширений, что это стало кошмаром обслуживания.]
У нас есть два типа URL: «HTML» URL, которые реализуют ориентированные на человека HTML-страницы, и «JSON» URL, которые реализуют обработку, ориентированную на веб-сервисы. Наши функции просмотра часто выглядят так.
Дело в том, что полезная функциональность основана на двух презентациях. Представление JSON обычно представляет собой только один объект, который был запрошен. HTML-презентация часто включает в себя все виды навигационных средств и другие контекстные подсказки, которые помогают людям быть продуктивными.
Все
jsonView
функции очень похожи, что может немного раздражать. Но это Python, поэтому сделайте их частью вызываемого класса или напишите декораторы, если это поможет.источник
y = someUsefulThing(...)
это «Ужасное повторение», то все ссылки на все функции и методы «ужасны». Я не понимаю, как избежать ссылки на функцию более одного раза.someUsefulThing(request, object_id)
же и выражение для поиска данных. Теперь у вас есть две копии одного и того же выражения в разных точках вашей программы. В принятом ответе выражение данных записывается один раз. Замените вашsomeUsefulThing
звонок длинной строкой, какpaginate(request, Post.objects.filter(deleted=False, owner=request.user).order_by('comment_count'))
и посмотрите на код. Я надеюсь, что это проиллюстрирует мою точку зрения.Смотрите Python Web Frameworks вики.
Возможно, вам не нужны полностью интегрированные стеки , но оставшийся список все еще довольно длинный.
источник
Мне очень нравится CherryPy . Вот пример спокойного веб-сервиса:
Это подчеркивает то, что мне действительно нравится в CherryPy; Это полностью рабочий пример, который очень понятен даже тем, кто не знает основы. Если вы запустите этот код, вы сразу увидите результаты в своем веб-браузере; например, посещение http: // localhost: 8080 / celc_to_fahr? градусов = 50 будет отображаться
122.0
в вашем веб-браузере.источник
Взгляни на
источник
Я не вижу смысла использовать Django просто для того, чтобы представить REST API, есть более легкие и более гибкие решения. Джанго несет на стол много других вещей, которые не всегда нужны. Конечно, не нужно, если вы хотите предоставить какой-то код только как REST-сервис.
Мой личный опыт, fwiw, заключается в том, что, как только у вас будет универсальный фреймворк, вы начнете использовать его ORM, его плагины и т. Д. Только потому, что это легко, и вы сразу же получите зависимость. от этого очень трудно избавиться.
Выбор веб-фреймворка - сложное решение, и я бы не стал выбирать решение с полным стеком, просто чтобы представить REST API.
Теперь, если вам действительно нужно / нужно использовать Django, тогда Piston - это хорошая среда REST для приложений django.
Тем не менее, CherryPy выглядит действительно хорошо, но кажется больше RPC, чем REST.
Глядя на примеры (я никогда не использовал их), вероятно, web.py - лучший и самый чистый, если вам нужен только REST.
источник
Вот обсуждение в документах CherryPy по REST: http://docs.cherrypy.org/dev/progguide/REST.html
В частности, он упоминает встроенный диспетчер CherryPy с именем MethodDispatcher, который вызывает методы на основе их идентификаторов HTTP-глаголов (GET, POST и т. Д.).
источник
В 2010 году сообщества Pylons и repoze.bfg «объединили усилия» для создания Pyramid , веб-фреймворка, основанного в основном на repoze.bfg. Он сохраняет философию своих родительских структур и может использоваться для служб RESTful . Это стоит посмотреть.
источник
Piston - очень гибкая структура для написания RESTful API для приложений Django.
источник
Кажется, что все виды веб-фреймворков Python теперь могут реализовывать интерфейсы RESTful.
Для Django, помимо вкусного пирога и поршня, django-rest-framework - многообещающая вещь, которую стоит упомянуть. Я уже перенес один из моих проектов на него гладко.
Быстрый пример:
Возьмите пример с официального сайта, все приведенные выше коды предоставляют API, самодостаточный документ (например, веб-сервис на основе мыла) и даже песочницу, чтобы немного протестировать. Очень удобство
Ссылки: http://django-rest-framework.org/
источник
Я не эксперт в мире питонов, но я использую django, который является отличным веб-фреймворком и может быть использован для создания полноценного фреймворка.
источник
web2py включает поддержку простого построения RESTful API, описанную здесь и здесь (видео). В частности, посмотрите
parse_as_rest
, что позволяет вам определять шаблоны URL, которые сопоставляют аргументы запроса с запросами к базе данных; иsmart_query
, который позволяет вам передавать произвольные запросы на естественном языке в URL.источник
Я вы используете Django , то вы можете рассмотреть Джанго-tastypie в качестве альтернативы Джанго поршней . Проще настраиваться на источники данных, отличные от ORM, чем на поршень, и имеет отличную документацию .
источник
Я настоятельно рекомендую TurboGears или Bottle:
TurboGears:
Бутылка:
источник
Мы работаем над структурой для строгих служб REST, ознакомьтесь с http://prestans.googlecode.com
Сейчас мы работаем с ранней версией Alpha, мы тестируем ее с mod_wsgi и Google AppEngine.
Нужны тестеры и отзывы. Спасибо.
источник