python সহজ পাইথন REST(ওয়েব পরিষেবাদি) ফ্রেমওয়ার্ক সুপারিশ?




সহজ ভাষায় পাইথন ৩ pdf download (13)

আশ্চর্যজনক কোন এক flask উল্লিখিত।

from flask import Flask
app = Flask(__name__)

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

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

সার্ভারাইডে ব্যবহারের জন্য ভিন্ন পিয়থন-ভিত্তিক REST ফ্রেমওয়ার্কগুলির সুপারিশগুলির মধ্যে কোনও তালিকা আছে যা আপনার নিজের সম্পূর্ণ API টি লিখতে পারে? পছন্দসই এবং বিপরীত সঙ্গে পছন্দমত।

এখানে সুপারিশ যোগ করুন বিনা দ্বিধায় দয়া করে। :)


সব ধরণের পাইথন ওয়েব ফ্রেমওয়ার্কগুলি এখন RESTful ইন্টারফেসগুলি বাস্তবায়ন করতে পারে।

Django জন্য, সুস্বাদু এবং পিস্টন ছাড়া, django-rest-framework উল্লেখযোগ্য একটি প্রতিশ্রুতিশীল। আমি ইতিমধ্যে আমার প্রকল্পের একটি সহজে স্থানান্তরিত করেছি।

Django REST ফ্রেমওয়ার্ক Django এর জন্য একটি লাইটওয়েট রিস্ট ফ্রেমওয়ার্ক, যা লক্ষ্য করে এটি ভাল-সংযুক্ত, স্ব-বিবরণী বিশৃঙ্খলাপূর্ণ ওয়েব 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, স্ব ব্যাখ্যা করা নথি (সাবান ভিত্তিক webservice মত) এবং এমনকি একটি বিট পরীক্ষা করার জন্য স্যান্ডবক্স সরবরাহ করে। খুব সুবিধাজনক।

লিংক: http://django-rest-framework.org/


আমি দৃঢ়ভাবে TurboGears বা বোতল সুপারিশ:

TurboGears:

  • django চেয়ে কম verbose
  • আরো নমনীয়, কম এইচটিএমএল ভিত্তিক
  • কিন্তু: কম বিখ্যাত

রহমান:

  • খুব দ্রুত
  • শিখতে খুব সহজ
  • কিন্তু: সহজ এবং পরিপক্ক না


আমরা অত্যাধুনিক ওয়েব সেবা জন্য Django ব্যবহার করছি।

মনে রাখবেন - বক্সের বাইরে - Django আমাদের প্রয়োজনের জন্য পর্যাপ্ত প্রমাণীকরণের দাগ ছিল না। আমরা Django-REST ইন্টারফেস ব্যবহার করেছি, যা অনেক সাহায্য করেছিল। [আমরা আমাদের নিজস্ব ঘূর্ণায়মান করেছি কারণ আমরা এতগুলি এক্সটেনশান তৈরি করেছি যে এটি একটি রক্ষণাবেক্ষণের দুঃস্বপ্ন হয়ে উঠেছে।]

আমাদের কাছে দুটি ধরণের URL রয়েছে: "এইচটিএমএল" ইউআরএল যা মানব-ভিত্তিক HTML পৃষ্ঠাগুলিকে বাস্তবায়ন করে এবং "জেসন" 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

বিন্দু যে দুটি কার্যকারিতা আউট কার্যকর কার্যকারিতা factored হয়। JSON উপস্থাপনা সাধারণত অনুরোধ করা হয় যে শুধুমাত্র একটি বস্তু। এইচটিএমএল উপস্থাপনাটি প্রায়শই নেভিগেশান এডস এবং অন্যান্য প্রসঙ্গগত সূত্র যা মানুষকে উত্পাদনশীল হতে সহায়তা করে।

jsonView ফাংশন সব খুব অনুরূপ, যা একটু বিরক্তিকর হতে পারে। কিন্তু এটি পাইথন, সুতরাং এটি একটি কলযোগ্য ক্লাসের অংশ তৈরি করুন বা এটির সাহায্যকারী সজ্জা লেখার জন্য তৈরি করুন।


একটি RESTful API ডিজাইন করার সময় সতর্কতা অবলম্বন করা GET এবং POST এর সম্মতি হয়, যেমন তারা একই জিনিস। Django এর ফাংশন-ভিত্তিক মতামত এবং CherryPy ডিফল্ট CherryPy সাথে এই ভুলটি করা সহজ, যদিও উভয় ফ্রেমওয়ার্কগুলি এখন এই সমস্যার ( শ্রেণী-ভিত্তিক মতামত এবং MethodDispatcher ) প্রায় একটি উপায় সরবরাহ করে।

HTTP- ক্রিয়াগুলি REST এ খুব গুরুত্বপূর্ণ , এবং যদি না আপনি এটি সম্পর্কে খুব সতর্ক হন, তবে আপনি একটি REST বিরোধী-প্যাটার্নের মধ্যে পড়ে যাবেন।

web.py , flask এবং বোতল এটি সঠিক কিছু কাঠামো। mimerender লাইব্রেরির সাথে মিলিত হলে (সম্পূর্ণ প্রকাশ: আমি এটি লিখেছি), তারা আপনাকে চমৎকার সুন্দর ওয়েবসাইটগুলি লিখতে দেয়:

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

পরিষেবার লজিক শুধুমাত্র একবার প্রয়োগ করা হয় এবং সঠিক উপস্থাপনা নির্বাচন (শিরোনাম স্বীকার করুন) + সঠিক রেন্ডার ফাংশন (বা টেমপ্লেট) প্রেরণ করা একটি সুশৃঙ্খল, স্বচ্ছ উপায়ে করা হয়।

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

আপডেট (এপ্রিল ২01২) : জ্যাঞ্জো-এর ক্লাস-ভিত্তিক মতামত, চেরিপির মেথডডিসপারচার এবং ফ্লাস্ক এবং বোতল ফ্রেমওয়ার্ক সম্পর্কিত আরও তথ্য। প্রশ্ন জিজ্ঞাসা করা হয় যখন ফিরে অস্তিত্ব।


2010 সালে, পাইলন এবং repoze.bfg সম্প্রদায়গুলি Pyramid তৈরির জন্য "বাহিনীতে যোগদান করেছিল", একটি ওয়েব ফ্রেমওয়ার্ক যা repoze.bfg এ সর্বাধিক ব্যাপকভাবে ভিত্তিক। এটি তার পিতামাতার কাঠামোর দর্শনের বজায় রাখে, এবং পুরাতন পরিষেবাগুলির জন্য ব্যবহার করা যেতে পারে। এটি একটি চেহারা মূল্য।


Piston Django অ্যাপ্লিকেশনের জন্য RESTful APIs wirting জন্য খুব নমনীয় ফ্রেমওয়ার্ক।


আমি Django ব্যবহার করছি আপনি django-tastypie বিবেচনা করতে পারেন django-tastypie বিকল্প হিসাবে। পিস্টন থেকে অ-ওআরএম ডাটা উত্সগুলিতে সুর করা সহজ, এবং এতে দুর্দান্ত documentation


এখানে REST এ CherryPy ডক্সগুলিতে একটি আলোচনা হয়েছে: docs.cherrypy.org/dev/progguide/REST.html

বিশেষভাবে এটি মেথডডিসপ্যাচার নামে চেরিপী প্রেরককে নির্মিত একটি উল্লেখ করেছে, যা তাদের HTTP ক্রিয়া সনাক্তকারী (GET, POST, ইত্যাদি ...) এর উপর ভিত্তি করে পদ্ধতিগুলি আহ্বান করে।


আমরা কঠোর REST পরিষেবাগুলির জন্য একটি কাঠামোতে কাজ করছি, http://prestans.googlecode.com দেখুন

এই মুহূর্তে তার প্রথম আলফা, আমরা mod_wsgi এবং Google এর AppEngine এর বিরুদ্ধে পরীক্ষা করছি।

পরীক্ষক এবং প্রতিক্রিয়া খুঁজছেন। ধন্যবাদ।


আমি শুধু একটি REST api প্রকাশ করার জন্য Django ব্যবহার করার কোনো কারণ দেখি না, হালকা এবং আরো নমনীয় সমাধান আছে। Django টেবিল আরো অনেক কিছু বহন করে, যে সবসময় প্রয়োজন হয় না। যদি আপনি কেবল REST পরিষেবা হিসাবে কিছু কোড প্রকাশ করতে চান তবে নিশ্চিতভাবে প্রয়োজন নেই।

আমার ব্যক্তিগত অভিজ্ঞতা, fwiw, একবার আপনি এক আকার-ফিট-সমস্ত ফ্রেমওয়ার্ক একবার, আপনি তার ORM, তার প্লাগিন, ইত্যাদি ব্যবহার শুরু করতে হবে কারণ এটি সহজ, এবং কোন সময় আপনি একটি নির্ভরতা থাকার শেষ যে পরিত্রাণ পেতে খুব কঠিন।

একটি ওয়েব ফ্রেমওয়ার্ক নির্বাচন করা একটি কঠিন সিদ্ধান্ত, এবং আমি একটি REST api প্রকাশ করতে শুধুমাত্র একটি সম্পূর্ণ স্ট্যাক সমাধান বাছাই করা এড়াতে হবে।

এখন, যদি আপনি সত্যিই Django ব্যবহার করতে চান, তাহলে পিস্টন django অ্যাপ্লিকেশনের জন্য একটি চমৎকার REST ফ্রেমওয়ার্ক।

যে বলেন, CherryPy সত্যিই খুব সুন্দর দেখায়, কিন্তু REST চেয়ে আরপিসি মনে হয়।

নমুনাগুলিতে দেখছি (আমি কখনও এটি ব্যবহার করি নি), সম্ভবত যদি REST এর প্রয়োজন হয় তবে সম্ভবত ওয়েবপৃষ্ঠাটি সর্বোত্তম এবং পরিচ্ছন্ন।


আমি পাইথন জগতের একজন বিশেষজ্ঞ নই কিন্তু আমি Django ব্যবহার করছি যা একটি চমৎকার ওয়েব ফ্রেমওয়ার্ক এবং এটি একটি বিশ্রামপূর্ণ ফ্রেমওয়ার্ক তৈরি করতে ব্যবহার করা যেতে পারে।





frameworks