sourcecode

Python REST(웹 서비스) 프레임워크 권장 사항

copyscript 2022. 12. 6. 22:07
반응형

Python REST(웹 서비스) 프레임워크 권장 사항

서버사이드에서 자신의 RESTful API를 작성하기 위해 사용하는 다양한 Python 기반 REST 프레임워크의 추천 목록이 어딘가에 있습니까?찬반양론이 있는 게 더 좋습니다.

여기에 자유롭게 추천을 추가해 주세요.:)

RESTful API를 설계할 때 주의해야 할 점은 GET과 POST의 조합입니다.이것들은 같은 것입니다.Django의 함수 기반 와 CherryPy의 디폴트 디스패처에서는 이 오류가 발생하기 쉽습니다.다만, 현재는, 양쪽의 프레임워크가 이 문제를 회피하는 방법을 제공하고 있습니다(각각 클래스 베이스 뷰와 Method Dispatcher).

HTTP 속담은 REST에서 매우 중요하기 때문에 주의하지 않으면 REST 안티패턴에 빠질 수 있습니다.

올바른 프레임워크로는 web.py, Flask, Bottle 등이 있습니다.마임렌더 라이브러리와 결합할 경우(전체 공개:제가 작성했습니다)를 사용하면 RESTful Webservices를 작성할 수 있습니다.

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 header) + 적절한 렌더링 기능(또는 템플릿)으로의 디스패치는 깔끔하고 투명한 방식으로 수행됩니다.

$ 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년 4월): Django의 클래스 베이스 뷰, CherryPy의 Method Dispatcher 및 Flask and Bottle 프레임워크에 대한 정보 추가.질문을 받았을 때 둘 다 존재하지 않았다.

아무도 플라스크에 대해 언급하지 않았다니 놀랍군요.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

우리는 RESTful 웹 서비스를 위해 장고를 사용하고 있습니다.

즉시 사용할 수 있는 Django는 우리의 요구를 충족시킬 만큼 충분히 세분화된 인증을 받지 못했습니다.Django-REST 인터페이스를 사용하여 많은 도움이 되었습니다.[그 후 너무 많은 연장을 했기 때문에 유지보수의 악몽이 되어 버렸습니다.

두 종류의 URL이 있습니다.인간 지향 HTML 페이지를 구현하는 "html" URL과 웹 서비스 지향 처리를 구현하는 "json" URL입니다.우리의 뷰 기능은 종종 이렇게 보입니다.

def someUsefulThing( request, object_id ):
    # do some processing
    return { a dictionary with results }

def htmlView( request, object_id ):
    d = someUsefulThing( request, object_id )
    render_to_response( 'template.html', d, ... )

def jsonView( request, object_id ):
    d = someUsefulThing( request, object_id )
    data = serializers.serialize( 'json', d['object'], fields=EXPOSED_FIELDS )
    response = HttpResponse( data, status=200, content_type='application/json' )
    response['Location']= reverse( 'some.path.to.this.view', kwargs={...} )
    return response

요점은 두 프레젠테이션 중 유용한 기능이 고려된다는 것입니다.JSON 프레젠테이션은 일반적으로 요청된 개체 중 하나일 뿐입니다.HTML 프레젠테이션은 종종 사람들의 생산성을 높이는 데 도움이 되는 모든 종류의 내비게이션 보조 도구와 다른 상황별 단서를 포함합니다.

jsonView기능은 모두 비슷하기 때문에 조금 귀찮을 수 있습니다.하지만 Python이기 때문에 호출 가능한 클래스에 포함시키거나 도움이 된다면 데코레이터를 쓰세요.

Python Web Frameworks wiki를 참조하십시오.

전체 스택 프레임워크는 필요하지 않지만 나머지 목록은 여전히 상당히 깁니다.

체리파이를 정말 좋아해요.다음은 안심할 수 있는 웹 서비스의 예입니다.

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())

이것은 Cherry Py에 대해 제가 정말 좋아하는 점을 강조합니다.이것은 틀을 모르는 사람도 이해할 수 있는 완전히 유효한 예입니다.이 코드를 실행하면 웹 브라우저에서 결과를 즉시 볼 수 있습니다. 예를 들어, visiting http://localhost:8080/celc_to_substr=50이 표시됩니다.122.0를 선택합니다.

을 보다.

REST API를 공개하기 위해 Django를 사용할 이유는 없습니다.경량하고 유연한 솔루션이 있습니다.장고는 항상 필요하지는 않은 많은 다른 것들을 테이블로 옮긴다.REST 서비스로 일부 코드만 노출하려는 경우에는 반드시 필요하지 않습니다.

제 개인적인 경험으로는 모든 것을 하나로 묶는 프레임워크를 구축하면 쉽게 ORM이나 플러그인 등을 사용할 수 있게 됩니다.또한 곧 의존성을 해소할 수 없게 됩니다.

웹 프레임워크를 선택하는 것은 어려운 결정이며, REST API를 공개하기 위해 풀 스택 솔루션을 선택하는 것은 피하고 싶습니다.

만약 당신이 정말로 Django를 사용하고 싶다면, Piston은 django 앱을 위한 훌륭한 REST 프레임워크입니다.

Cherry Py도 좋아 보이지만 REST보다 RPC가 더 많은 것 같습니다.

샘플(사용한 적이 없습니다)을 보면 REST만 필요하다면 web.py이 가장 좋고 깨끗할 것입니다.

REST에 관한 Cherry Py documents에서 논의합니다.http://docs.cherrypy.org/dev/progguide/REST.html

특히 MethodDispatcher라고 불리는 내장 CherryPy 디스패처를 언급하고 있습니다.MethodDispatcher는 HTTP-verb 식별자(GET, POST 등)에 근거해 메서드를 호출합니다.

2010년, 파이프와 재녹음.bfg 커뮤니티는 repoze.bfg를 가장 많이 기반으로 하는 웹 프레임워크인 피라미드를 만들기 위해 힘을 합쳤습니다.상위 프레임워크의 철학을 유지하며 RESTful 서비스에 사용할 수 있습니다.볼만해.

Piston은 Django 어플리케이션용 RESTful API를 작성하기 위한 매우 유연한 프레임워크입니다.

이제 모든 종류의 파이썬 웹 프레임워크가 RESTful 인터페이스를 구현할 수 있을 것 같습니다.

장고에게는 맛있는 파이와 피스톤 외에도 장고 휴식 프레임워크는 언급할 가치가 있는 유망주다.이미 프로젝트 하나를 원활하게 이행했습니다.

Django REST 프레임워크는 Django를 위한 경량 REST 프레임워크로, 잘 연결된 자기 설명형 웹 API를 쉽게 구축할 수 있도록 하는 것을 목표로 하고 있습니다.

간단한 예:

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/

저는 비단뱀의 세계에 대한 전문가는 아니지만 django를 사용해 왔습니다.이것은 훌륭한 웹 프레임워크이며, 편안한 프레임워크를 만드는 데 사용할 수 있습니다.

web2py는 여기와 여기(동영상)에서 설명한 바와 같이 RESTful API를 쉽게 구축할 수 있도록 지원합니다.특히 를 참조해 주세요.이것에 의해, 요구 arg를 데이타베이스 쿼리에 매핑 하는 URL 패턴을 정의할 수 있습니다.또, URL내의 임의의 자연 언어 쿼리를 전달할 수 있습니다.

장고를 사용하고 있다면 장고피스톤의 대체품으로 장고타스티피를 고려해보세요.피스톤보다 비 ORM 데이터 소스에 맞게 조정하기가 쉽고 문서도 우수합니다.

TurboGears 또는 Bottle을 강력히 권장합니다.

터보 기어:

  • 장고보다 덜 장황하다
  • HTML을 중시하지 않고 유연성이 향상
  • 하지만: 덜 유명함

병:

  • 매우 빠르다
  • 매우 배우기 쉽다
  • 하지만: 미니멀리즘적이고 성숙하지 않다

엄격한 REST 서비스를 위한 프레임워크를 준비하고 있습니다.http://prestans.googlecode.com를 참조하십시오.

현재 초기 Alpha에서 mod_wsgi와 Google의 AppEngine에 대해 테스트 중입니다.

테스터와 피드백을 찾고 있습니다.감사해요.

언급URL : https://stackoverflow.com/questions/713847/recommendations-of-python-rest-web-services-framework

반응형