Python REST tövsiyələri (web services)?

Öz RESTful API-lərinizi yazmaq üçün serverdə istifadə üçün müxtəlif Python əsaslı REST infrastrukturlarının tövsiyələrindən bir yer varmı? Üstünlüklər və mənfi cəhətlər istənir.

Burada tövsiyələr əlavə edin.

321
03 апр. darius tərəfindən təyin 03 Apr 2009-04-03 16:13 '09 at 16:13 'da 2009-04-03 16:13
@ 16 cavab

RESTful API hazırlayarkən diqqətli olmaq üçün bir şey, GET və POST-i eyni olduqları kimi birləşdirməkdir. Hər iki sxem indi bu problemi həll etmək üçün bir yol təqdim etsə də, bu səhvləri Django funksional baxışlarıCherryPy ilə etmək asandır ( sinif-əsaslı baxışlarMethodDispatcher .)

HTTP verbs REST- də çox vacibdir və əgər bu barədə çox diqqətli olmursanız , REST-ə qarşı nümunə götürüləcəksiniz.

Sağa çəkən bəzi çərçivələr web.py , flaskşüşədir . Mimerender kitabxanası ilə birlikdə (tam açıqlama: Mən bunu yazdım), onlar yaxşı RESTful web services yazmağa imkan verir:

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

Xidmət mantığı yalnız bir dəfə həyata keçirilir və müvafiq təqdimat funksiyasına (və ya şablon) göndərilmə düzgün seçimdir (başlığı qəbul et) + düzgün, şəffaf bir şəkildə aparılır.

 $ 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! 

Update (Aprel 2012) : Django əsaslı sinif görünüşləri, CherryPy MethodDispatcher infrastrukturu və flasks və şüşə haqqında əlavə məlumatlar. Suala soruşulduqda geri dönmədi.

192
28 мая '09 в 13:25 2009-05-28 13:25 Martin Blech tərəfindən verilmiş cavab 28 may '09 saat 13:25 'da 2009-05-28 13:25

Heç kəs şüşə şaşırmadım .

border=0
 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 
71
08 янв. İstifadəçi tərəfindən verilmiş cavabı161642 Jan 08 2011-01-08 09:49 '11 at 9:49 2011-01-08 09:49

Biz RESTful web services üçün Django'dan istifadə edirik.

Xahiş edirik unutmayın ki, Django'dan ehtiyaclarımız üçün kifayət qədər gözəl bir identifikasiya yox idi. Biz həqiqətən kömək edən Django-REST interfeysini istifadə etdik . [Biz çox uzantıya malik olduğumuzdan bəri, özümüzü skatinglə qoruyub saxlamışıq.]

Bizdə iki növ URL var: "html" URL, insan yönümlü HTML səhifələrini və web-xidmət yönümlü emal həyata keçirən "json" URL həyata keçirir. Baxış xüsusiyyətlərimiz tez-tez belədir.

 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 

Əslində faydalı funksionallıq iki təqdimatdan nəzərə alınır. Bir JSON nümayəndəliyi ümumiyyətlə tələb olunan yalnız bir obyektdir. HTML təqdimatına tez-tez insanlar naviqasiya vasitələrini və məhsuldar olmağa kömək edən digər kontekstli ipuçlarını daxildir.

jsonView funksiyaları bir- jsonView bənzəyir, bu isə bir az zəhlətökən ola bilər. Amma bu Python, buna görə də onları çağırılmaq üçün sinifin bir hissəsi halına gətirin və əgər bu köməkçi olarsa dekorativ yazmaq.

23
03 апр. Cavab S.Lott 03 Aprel. 2009-04-03 16:30 '09 saat 04:30 'da 2009-04-03 16:30

Python Web Framework wiki səhifəsinə baxın.

Yəqin ki, tam yığın çərçivələrə ehtiyacınız yoxdur, amma qalan siyahı hələ də uzun müddətdir.

11
03 апр. Cavab gimel 03 apr tərəfindən verilir . 2009-04-03 16:26 '09 at 4:26 pm 2009-04-03 16:26

CherryPy'yi çox sevirəm . Burada rahat bir web xidməti nümunəsi:

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

Bu, CherryPy haqqında həqiqətən xoşuma gəldi nə vurğulayır; Bu, tam olaraq işləyən bir nümunədir, bu da çərçivəni bilməyənlər üçün çox aydındır. Bu kodu çalıştırırsanız, nəticələri dərhal veb brauzerinizdə görə bilərsiniz; məsələn, http: // localhost: 8080 / celc_to_fahr? degrees = 50 səhifəsini ziyarət edərək, veb brauzerinizdə 122.0 göstərilir.

8
03 апр. Cavab Eli Courtwright tərəfindən verilir 03 Apr. 2009-04-03 16:39 '09 da 4:39 'da 2009-04-03 16:39

Bir göz atın

8
11 авг. Cavab verilir z8000 11 aug. 2009-08-11 03:22 '09 at 3:22 pm 2009-08-11 03:22

Mən Django'yu yalnız REST api ortaya qoymaq üçün istifadə etmək üçün heç bir səbəb görmürəm, daha asan və daha çevik həllər var. Django həmişə lazım olmayan bir çox şeyi daşıyır. Əlbəttə ki, bir REST xidməti kimi hər hansı bir kodu göstərmək istəyirsinizsə, lazım deyil.

Mənim şəxsi təcrübə, hər biriniz üçün bir mühit olduğunda, onun ORM, pluginsini və s. yalnız asan olduğundan və kiminlə qurtulmaq çox çətin olduğuna inanırsınız.

Web çərçivəsini seçmək çətin bir qərardır və mən REST api-nin ifşa edilməsi üçün tam yığma həllini seçməyəcəyəm.

İndi Django'dan həqiqətən ehtiyac duyarsanız / ehtiyacınız varsa, Piston, django tətbiqləri üçün yaxşı bir REST quruluşudur.

CherryPy də çox yaxşı baxmaq üçün deyilir amma REST daha RPC görünür.

Nümunələrə baxarkən (heç vaxt istifadə etməmişəm), bəlkə də web.py yalnız RESTə ehtiyacınız varsa, ən yaxşı və ən təmizdir.

8
01 авг. Savino Sguera tərəfindən verilmiş cavab 01 Avqust. 2011-08-01 13:50 '11 at 13:50 2011-08-01 13:50

2010-cu ildə Pylons və repoze.bfg icmaları əsasən repoze.bfg əsasında Pyramid yaratmaq üçün qüvvələrə qoşulmuşdur.Bu mənbə çərçivələrinin fəlsəfəsini saxlayır və RESTful xidmətlər üçün istifadə edilə bilər. Görməyə dəyər.

6
28 марта '11 в 19:13 2011-03-28 19:13 cavab 28 mart 2011 -ci il saat 19 : 13 -da Syrion tərəfindən verilmişdir

Burada CherryPy-nin REST sənədlərində müzakirə olunur: http://docs.cherrypy.org/dev/progguide/REST.html

Xüsusilə, HTTP verbsinin (GET, POST, və s.) İdentifikatorlarına əsaslanan metodları çağırır olan MethodDispatcher adlı CherryPy əlaqədar dispetçer xatırlanır.

6
05 окт. cavab 05 oktyabr ayına qədər verilir . 2010-10-05 13:23 '10 at 13:23 2010-10-05 13:23

Göründüyü kimi, bütün python web çərçivələri RESTful interfeyslərini həyata keçirə bilər.

Django üçün, fərdiləşdirmə və pistonla yanaşı, django-rest-çərçivə perspektivli və qeyd etmək lazımdır. Mən artıq layihələrimdən birinə hamar keçiş keçirdim.

Django REST quruluşu, yaxşı əlaqəli, özünü izah edən RESTful veb interfeyinin qurulmasını asanlaşdırmaq üçün nəzərdə tutulmuş Django üçün yüngül REST quruluşudur.

Tez nümunə:

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

Rəsmi saytdan nümunə götürün, yuxarıda göstərilən bütün kodlar api, sənədin özü (məsələn, sabuna əsaslanan bir web xidməti) və hətta test üçün bir sandbox təmin edir. Çox rahat.

Bağlantılar: http://django-rest-framework.org/

5
25 февр. cavab fevralın 25-də Sun Liwen tərəfindən verilir . 2012-02-25 16:26 '12 at 4:26 pm 2012-02-25 16:26

Piston , Django tətbiqləri üçün RESTful API istifadə etmək üçün çox çevik bir mühitdir.

5
04 дек. Cavab DenisKolodin tərəfindən verilir 04 Dekabr. 2010-12-04 21:07 '10 at 21:07 2010-12-04 21:07

Mən python dünyasında bir mütəxəssis deyiləm, amma django istifadə edirəm ki , bu, əla bir veb xəritəsidir və sakit bir quruluş yaratmaq üçün istifadə edilə bilər.

3
03 апр. Cavab Jeremy B tərəfindən verilir 03 Aprel. 2009-04-03 16:15 '09 at 4:15 PM 2009-04-03 16:15

web2py buradaburada təsvir olunan RESTful API-nin asan yaradılması üçün dəstək daxildir (video). Xüsusilə, parse_as_rest , bu verilənlər bazası istəkləri ilə args istəklərinə uyğun olan URL nümunələrini müəyyən etməyə imkan verir; və smart_query , URL-də təbii dil üçün zahirən istəkləri göndərməyə imkan verir.

3
28 марта '11 в 17:26 2011-03-28 17:26 Cavab Anthony tərəfindən verilir 28 Mart '11, 17:26 2011-03-28 17:26

Django'dan istifadə edirəm, sonra django-pistona alternativ olaraq django-tastypie hesab edə bilərsiniz. Bir pistordan ORM-dən başqa məlumat mənbələrinin yaradılması asanlaşdırılıb və bir çox sənədlər var .

2
10 февр. Cavab Kristian tərəfindən verildi 10 Fevral. 2012-02-10 10:49 '12 at 10:49 AM 2012-02-10 10:49

Sıx REST xidmətlərinin strukturunda işləyirik, http://prestans.googlecode.com saytını yoxlayın

Erkən Alpha'da hazırda mod_wsgi və Google AppEngine-i test edirik.

Biz test və təhlil üçün axtarırıq. Təşəkkür edirik.

0
22 нояб. Cavab 22 dekabrda Devraj verildi. 2011-11-22 03:46 '11 at 3:46 2011-11-22 03:46

TurboGears və ya Şişe:

TurboGears:

  • django daha az ətraflı
  • daha çevik, daha az HTML yönümlüdür
  • lakin daha az bilinir

Şüşə:

  • çox sürətli
  • öyrənmək çox asan
  • lakin minimalist və yetkin deyil
0
12 нояб. Cavab Federico NOV 12 tərəfindən verilir . 2009-11-12 18:13 '09 at 18:13 'da 2009-11-12 18:13