Apakah ada daftar rekomendasi kerangka kerja REST berbasis Python yang berbeda untuk digunakan di sisi server untuk menulis API SISA Anda sendiri? Lebih disukai dengan pro dan kontra.
Silakan menambahkan rekomendasi di sini. :)
python
web-services
rest
frameworks
darius
sumber
sumber
Jawaban:
Sesuatu yang harus diperhatikan ketika mendesain API yang tenang adalah penggabungan dari GET dan POST, seolah-olah mereka adalah hal yang sama. Sangat mudah untuk membuat kesalahan ini dengan Django 's pandangan fungsi berbasis dan CherryPy ' s operator default, meskipun kedua kerangka kerja sekarang menyediakan cara mengatasi masalah ini ( pandangan berbasis kelas dan MethodDispatcher , masing-masing).
HTTP-kata kerja sangat penting dalam REST, dan kecuali Anda sangat berhati-hati tentang hal ini, Anda akhirnya akan jatuh ke dalam anti-pola REST .
Beberapa kerangka kerja yang melakukannya dengan benar adalah web.py , Labu dan Botol . Ketika dikombinasikan dengan perpustakaan mimerender (pengungkapan penuh: saya menulisnya), mereka memungkinkan Anda untuk menulis layanan web yang bagus:
Logika layanan diimplementasikan hanya sekali, dan pemilihan representasi yang benar (Terima header) + pengiriman ke fungsi render yang tepat (atau templat) dilakukan dengan cara yang rapi dan transparan.
Pembaruan (April 2012) : menambahkan informasi tentang pandangan berbasis kelas Django, MethodDispatcher CherryPy dan kerangka kerja Flask and Bottle. Tidak ada kembali ketika pertanyaan diajukan.
sumber
Terkejut tidak ada yang menyebutkan termos .
sumber
Kami menggunakan Django untuk layanan web RESTful.
Perhatikan bahwa - di luar kotak - Django tidak memiliki otentikasi yang cukup untuk kebutuhan kita. Kami menggunakan antarmuka Django-REST , yang sangat membantu. [Sejak itu kami menggulirkan milik kami sendiri karena kami telah membuat begitu banyak ekstensi yang telah menjadi mimpi buruk pemeliharaan.]
Kami memiliki dua jenis URL: URL "html" yang menerapkan halaman HTML yang berorientasi manusia, dan URL "json" yang menerapkan pemrosesan berorientasi layanan web. Fungsi tampilan kami sering terlihat seperti ini.
Intinya adalah bahwa fungsionalitas yang berguna diperhitungkan dari dua presentasi. Presentasi JSON biasanya hanya satu objek yang diminta. Presentasi HTML sering menyertakan semua jenis alat bantu navigasi dan petunjuk kontekstual lainnya yang membantu orang menjadi produktif.
Semua
jsonView
fungsinya sangat mirip, yang bisa sedikit mengganggu. Tapi itu Python, jadi buat mereka bagian dari kelas yang bisa dipanggil atau tulis dekorator jika itu membantu.sumber
y = someUsefulThing(...)
"Pengulangan mengerikan", maka semua referensi ke semua fungsi dan metode "mengerikan". Saya gagal memahami cara menghindari referensi fungsi lebih dari sekali.someUsefulThing(request, object_id)
juga ekspresi pengambilan data. Sekarang Anda memiliki dua salinan ekspresi yang sama di berbagai titik di program Anda. Dalam jawaban yang diterima, ekspresi data ditulis satu kali. GantisomeUsefulThing
panggilan Anda dengan string yang panjang, sepertipaginate(request, Post.objects.filter(deleted=False, owner=request.user).order_by('comment_count'))
dan lihat kodenya. Saya harap ini akan mengilustrasikan poin saya.Lihat wiki Python Web Frameworks .
Anda mungkin tidak membutuhkan kerangka kerja tumpukan penuh , tetapi daftar yang tersisa masih cukup panjang.
sumber
Saya sangat suka CherryPy . Berikut adalah contoh layanan web yang tenang:
Ini menekankan apa yang saya sukai dari CherryPy; ini adalah contoh yang benar-benar berfungsi yang sangat dimengerti bahkan untuk seseorang yang tidak tahu kerangka kerjanya. Jika Anda menjalankan kode ini, maka Anda dapat segera melihat hasilnya di browser web Anda; mis. mengunjungi http: // localhost: 8080 / celc_to_fahr? derajat = 50 akan ditampilkan
122.0
di browser web Anda.sumber
Melihat
sumber
Saya tidak melihat alasan untuk menggunakan Django hanya untuk mengekspos api REST, ada solusi yang lebih ringan dan lebih fleksibel. Django membawa banyak hal lain ke meja, yang tidak selalu dibutuhkan. Tentu tidak diperlukan jika Anda hanya ingin mengekspos beberapa kode sebagai layanan REST.
Pengalaman pribadi saya, fwiw, adalah bahwa begitu Anda memiliki kerangka kerja satu ukuran untuk semua, Anda akan mulai menggunakan ORM, plugins, dll. Hanya karena mudah, dan dalam waktu singkat Anda memiliki ketergantungan. itu sangat sulit untuk dihilangkan.
Memilih kerangka kerja web adalah keputusan yang sulit, dan saya akan menghindari memilih solusi tumpukan penuh hanya untuk mengekspos api REST.
Sekarang, jika Anda benar-benar membutuhkan / ingin menggunakan Django, maka Piston adalah kerangka kerja REST yang bagus untuk aplikasi Django.
Yang sedang berkata, CherryPy terlihat sangat bagus juga, tetapi tampaknya lebih RPC daripada REST.
Melihat sampel (saya tidak pernah menggunakannya), mungkin web.py adalah yang terbaik dan terbersih jika Anda hanya perlu ISTIRAHAT.
sumber
Berikut ini adalah diskusi dalam dokumen CherryPy tentang REST: http://docs.cherrypy.org/dev/progguide/REST.html
Secara khusus itu menyebutkan built-in dispatcher CherryPy bernama MethodDispatcher, yang memanggil metode berdasarkan pengidentifikasi HTTP-kata kerja mereka (GET, POST, dll ...).
sumber
Pada 2010, komunitas Pylons dan repoze.bfg "bergabung" untuk membuat Pyramid , kerangka kerja web yang paling banyak berbasis pada repoze.bfg. Ia mempertahankan filosofi kerangka induknya, dan dapat digunakan untuk layanan RESTful . Layak dilihat.
sumber
Piston adalah kerangka kerja yang sangat fleksibel untuk memeriksa API tenang untuk aplikasi Django.
sumber
Tampaknya semua jenis kerangka kerja web python dapat mengimplementasikan antarmuka RESTful sekarang.
Bagi Django, selain tastypie dan piston, django-rest-framework juga menjanjikan. Saya sudah memigrasi salah satu proyek saya dengan lancar.
Contoh cepat:
Ambil contoh dari situs resmi, semua kode di atas menyediakan api, dokumen menjelaskan sendiri (seperti layanan web berbasis sabun) dan bahkan kotak pasir untuk menguji sedikit. Sangat nyaman.
Tautan: http://django-rest-framework.org/
sumber
Saya bukan ahli di dunia python tetapi saya telah menggunakan Django yang merupakan kerangka kerja web yang sangat baik dan dapat digunakan untuk membuat kerangka kerja yang tenang.
sumber
web2py menyertakan dukungan untuk dengan mudah membangun RESTful API, yang dijelaskan di sini dan di sini (video). Secara khusus, lihat
parse_as_rest
, yang memungkinkan Anda menentukan pola URL yang memetakan argumen permintaan ke permintaan basis data; dansmart_query
, yang memungkinkan Anda untuk mengirimkan pertanyaan bahasa alami yang sewenang-wenang di URL.sumber
Jika Anda menggunakan Django maka Anda dapat mempertimbangkan Django-tastypie sebagai alternatif untuk Django-piston . Lebih mudah mencari sumber data non-ORM daripada piston, dan memiliki dokumentasi yang bagus .
sumber
Saya sangat merekomendasikan TurboGears atau Botol:
TurboGears:
Botol:
sumber
Kami sedang mengerjakan kerangka kerja untuk layanan REST yang ketat, lihat http://prestans.googlecode.com
Saat ini di awal Alpha, kami sedang menguji terhadap mod_wsgi dan Google AppEngine.
Mencari penguji dan umpan balik. Terima kasih.
sumber