উত্তর:
একটি RESTful এপিআই ডিজাইন করার সময় যত্নবান হওয়ার কিছু হ'ল জিইটি এবং পোস্টের সংমিশ্রণ, যেন তারা একই জিনিস as এটা তোলে সঙ্গে এই ভুল করা খুবই সহজ জ্যাঙ্গো 'র ফাংশন-ভিত্তিক মতামত এবং CherryPy ,' ডিফল্ট ডেস্প্যাচার যদিও উভয় অবকাঠামো এখন এই সমস্যা এড়াতে একটি উপায় (প্রদান শ্রেণী ভিত্তিক মতামত এবং MethodDispatcher যথাক্রমে)।
REST- এ HTTP- ক্রিয়াগুলি অত্যন্ত গুরুত্বপূর্ণ এবং আপনি যদি এ সম্পর্কে খুব যত্নশীল না হন তবে আপনি একটি REST বিরোধী প্যাটার্নে পড়ে যাবেন ।
কিছু ফ্রেমওয়ার্ক যা এটি ডান পায় সেটি হ'ল ওয়েব.পি , ফ্লাস্ক এবং বোতল । মাইমেন্ডেন্ডার লাইব্রেরির সাথে মিলিত হলে (সম্পূর্ণ প্রকাশ: আমি এটি লিখেছিলাম), তারা আপনাকে দুর্দান্ত আরএসটিফুল ওয়েবসার্চগুলি লেখার অনুমতি দেয়:
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!
আপডেট (এপ্রিল ২০১২) : জ্যাঙ্গোর ক্লাস-ভিত্তিক মতামত, চেরিপাইয়ের মেথডিসপাচার এবং ফ্লাস্ক এবং বোতল ফ্রেমওয়ার্ক সম্পর্কিত তথ্য যুক্ত করা হয়েছে। যখন প্রশ্ন জিজ্ঞাসা করা হয়েছিল তখনও ফিরে ছিল না।
অবাক বিস্ময়ে কেউ ফ্লাস্ক উল্লেখ করেনি ।
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
আমরা রিস্টুল ওয়েব সার্ভিসের জন্য জ্যাঙ্গো ব্যবহার করছি ।
নোট করুন - বাক্সের বাইরে - জ্যাঙ্গোতে আমাদের প্রয়োজনের জন্য যথেষ্ট পরিমাণে প্রমাণীকরণ ছিল না। আমরা জ্যাঙ্গো-আরইএসটি ইন্টারফেস ব্যবহার করেছি , যা অনেক সাহায্য করেছিল। [এর পরে আমরা আমাদের নিজস্ব ঘূর্ণিত করেছি কারণ আমরা এতগুলি এক্সটেনশান করেছি যে এটি রক্ষণাবেক্ষণের দুঃস্বপ্ন হয়ে গেছে]]
আমাদের দুটি ধরণের ইউআরএল রয়েছে: "এইচটিএমএল" ইউআরএল যা মানব-ভিত্তিক এইচটিএমএল পৃষ্ঠাগুলি বাস্তবায়ন করে এবং "জসন" ইউআরএল যা ওয়েব-পরিষেবা ভিত্তিক প্রক্রিয়াকরণ বাস্তবায়ন করে। আমাদের দর্শন ফাংশন প্রায়শই এটির মতো দেখায়।
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
মূল কার্যকারিতা দুটি উপস্থাপনা থেকে সক্রিয় করা হয়। জেএসওএন উপস্থাপনাটি সাধারণত কেবলমাত্র একটি অবজেক্ট যা অনুরোধ করা হয়েছিল। এইচটিএমএল উপস্থাপনাটিতে প্রায়শই সব ধরণের নেভিগেশন এইড এবং অন্যান্য প্রাসঙ্গিক ক্লু অন্তর্ভুক্ত থাকে যা মানুষকে উত্পাদনশীল হতে সহায়তা করে।
jsonView
ফাংশন সব অনুরূপ, যা একটি বিট বিরক্তিকর হতে পারে। তবে এটি পাইথন, সুতরাং তাদেরকে কলযোগ্য শ্রেণীর অংশ করুন বা সজ্জা লিখুন যদি এটি সাহায্য করে।
y = someUsefulThing(...)
একটি "ভয়ঙ্কর পুনরাবৃত্তি" হয়, তবে সমস্ত ফাংশন এবং পদ্ধতির সমস্ত উল্লেখ "ভয়ঙ্কর"। কোনও ফাংশনকে একাধিকবার কীভাবে উল্লেখ করা যায় তা এড়াতে আমি ব্যর্থ হয়েছি ।
someUsefulThing(request, object_id)
একটি ডাটা আহরণ অভিব্যক্তি। আপনার প্রোগ্রামে বিভিন্ন পয়েন্টে এখন আপনার কাছে একই প্রকাশের দুটি কপি রয়েছে। গৃহীত উত্তরে, ডেটা এক্সপ্রেশন একবার লেখা হয়। আপনার someUsefulThing
কলটি দীর্ঘ স্ট্রিংয়ের সাথে প্রতিস্থাপন করুন , পছন্দ করুন paginate(request, Post.objects.filter(deleted=False, owner=request.user).order_by('comment_count'))
এবং কোডটি দেখুন। আমি আশা করি এটি আমার বক্তব্য চিত্রিত করবে।
দেখুন পাইথন ওয়েব ফ্রেমওয়ার্ক উইকি।
আপনার সম্ভবত পুরো স্ট্যাক ফ্রেমওয়ার্কের প্রয়োজন নেই, তবে বাকী তালিকাটি এখনও বেশ দীর্ঘ।
আমি সত্যিই চেরিপাই পছন্দ করি । এখানে একটি বিশ্রামহীন ওয়েব পরিষেবার উদাহরণ:
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())
এটি চেরিপাই সম্পর্কে সত্যই আমার কী পছন্দ করে তা জোর দেয়; এটি সম্পূর্ণরূপে কার্যকারী উদাহরণ যা এমনকি কাঠামোটি জানেন না এমন ব্যক্তির পক্ষে খুব বোধগম্য। আপনি যদি এই কোডটি চালান, তবে আপনি অবিলম্বে আপনার ওয়েব ব্রাউজারে ফলাফলগুলি দেখতে পাবেন; যেমন http: // লোকালহোস্ট: 8080 / celc_to_fahr? ডিগ্রি = 50 পরিদর্শন 122.0
করা আপনার ওয়েব ব্রাউজারে প্রদর্শিত হবে ।
একবার দেখুন
আমি কেবল একটি REST এপিআই প্রকাশের জন্য জ্যাঙ্গো ব্যবহার করার কোনও কারণ দেখছি না, আরও হালকা এবং আরও নমনীয় সমাধান রয়েছে। জাজানো টেবিলে প্রচুর অন্যান্য জিনিস বহন করে, যা সর্বদা প্রয়োজন হয় না। আপনি যদি কেবলমাত্র একটি আরএসটি পরিষেবা হিসাবে কিছু কোড প্রকাশ করতে চান তবে অবশ্যই এটির প্রয়োজন নেই।
আমার ব্যক্তিগত অভিজ্ঞতা, নতুন, আপনি একবার এক-আকারের ফিট সমস্ত কাঠামো পরে, আপনি এটি সহজ কারণ এটি এর ওআরএম, তার প্লাগইন, ইত্যাদি ব্যবহার শুরু করতে পারেন, এবং কোন সময় আপনি একটি নির্ভরতা থাকার শেষ না এ থেকে মুক্তি পাওয়া খুব কঠিন hard
ওয়েব কাঠামো নির্বাচন করা একটি কঠিন সিদ্ধান্ত, এবং আমি কেবলমাত্র একটি REST এপিআই প্রকাশ করার জন্য একটি সম্পূর্ণ স্ট্যাক সমাধান বেছে নেওয়া এড়াতে পারি।
এখন, আপনার যদি সত্যই জ্যাঙ্গোটি প্রয়োজন / ব্যবহার করতে চান, তবে পিস্তন জ্যাঙ্গো অ্যাপ্লিকেশনগুলির জন্য একটি দুর্দান্ত REST কাঠামো।
বলা হচ্ছে, চেরিপাই দেখতে খুব সুন্দর লাগছে, তবে আরআরএসটি-র চেয়ে আরও বেশি আরপিসি বলে মনে হচ্ছে।
নমুনাগুলি দেখে (আমি এটি কখনই ব্যবহার করি নি), সম্ভবত আপনার যদি কেবল বিশ্রামের প্রয়োজন হয় তবে ওয়েব.পিই সবচেয়ে ভাল এবং পরিষ্কার est
এখানে REST- তে চেরিপি ডক্সে একটি আলোচনা রয়েছে: http://docs.cherrypy.org/dev/progguide/REST.html
বিশেষত এটি মেথডিডিসপ্যাচার নামে পরিচিত চেরিপি প্রেরণকারীতে একটি বিল্টের উল্লেখ করেছে, যা তাদের এইচটিটিপি-ক্রিয়া শনাক্তকারীদের (জিইটি, পোস্ট, ইত্যাদি ...) উপর ভিত্তি করে পদ্ধতিগুলি আহ্বান করে।
২০১০ সালে পাইপানস এবং রেপোজ.বিএফজি সম্প্রদায়গুলি পিরামিড তৈরি করতে "বাহিনীতে যোগ দিয়েছিল" যা একটি ওয়েব ফ্রেম ফ্রেম সবচেয়ে বেশি ভিত্তি করে রেপোজ.বিএফজি-র উপর ভিত্তি করে। এটি এর মূল ফ্রেমওয়ার্কগুলির দর্শনগুলি ধরে রাখে, এবং রেস্টস্টুল পরিষেবাগুলির জন্য ব্যবহার করা যেতে পারে । এটি এক নজর মূল্যবান।
পিস্টন জ্যাঙ্গো অ্যাপ্লিকেশনের জন্য RESTful API গুলি wirting জন্য খুবই নমনীয় কাঠামো নেই।
মনে হচ্ছে সমস্ত ধরণের পাইথন ওয়েব ফ্রেমওয়ার্কগুলি এখনই RESTful ইন্টারফেস প্রয়োগ করতে পারে।
জ্যাঙ্গোর জন্য, টেস্টিপি এবং পিস্টন ছাড়াও, জাঙ্গো-বিশ্রাম-কাঠামোটি উল্লেখযোগ্য একটি প্রতিশ্রুতিবদ্ধ। আমি ইতিমধ্যে এটিতে আমার প্রকল্পের একটি মাইগ্রেশন করেছি।
জ্যাঙ্গো আরইএসটি ফ্রেমওয়ার্ক হ'ল জ্যাঙ্গোর জন্য একটি হালকা ওআরইএসইএস কাঠামো, যার লক্ষ্য এটি ভাল-সংযুক্ত, স্ব-বর্ণনামূলক আরএসটিফুল ওয়েব এপিআইগুলি তৈরি করা সহজ করে তোলে।
দ্রুত উদাহরণ:
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)),
)
অফিসিয়াল সাইট থেকে উদাহরণটি ধরুন, উপরের সমস্ত কোডগুলি এপিআই, স্ব-বর্ণিত ডকুমেন্ট (যেমন সাবান ভিত্তিক ওয়েবসার্চির মতো) এবং কিছুটা পরীক্ষার জন্য স্যান্ডবক্স সরবরাহ করে। খুব সুবিধা।
লিঙ্কগুলি: http://django-rest-framework.org/
আমি পাইথন জগতের বিশেষজ্ঞ নই তবে আমি জ্যাঙ্গো ব্যবহার করছি যা একটি দুর্দান্ত ওয়েব কাঠামো এবং একটি বিশ্রাম কাঠামো তৈরি করতে ব্যবহার করা যেতে পারে।
ওয়েব টুপি এখানে এবং এখানে বর্ণিত (ভিডিও) সহজেই RESTful এপিআই তৈরির জন্য সমর্থন অন্তর্ভুক্ত করে । বিশেষত, দেখুন parse_as_rest
, যা আপনাকে ইউআরএল নিদর্শনগুলি সংজ্ঞায়িত করতে দেয় যা ম্যাপের অনুরোধটি ডাটাবেস প্রশ্নগুলিতে আরোগুলি দেয়; এবং smart_query
, যা আপনাকে URL এ স্বেচ্ছাসেবী প্রাকৃতিক ভাষা কোয়েরি করতে সক্ষম করে।
আমি তোমাদের জ্যাঙ্গো ব্যবহার করছেন তারপর আপনি বিবেচনা করতে পারেন জ্যাঙ্গো-tastypie বিকল্প হিসেবে জ্যাঙ্গো-পিস্টন । পিস্টনের চেয়ে অ-ওআরএম ডেটা উত্সগুলিতে টিউন করা সহজ, এবং দুর্দান্ত ডকুমেন্টেশন রয়েছে ।
আমরা কঠোর REST পরিষেবাদির জন্য একটি ফ্রেমওয়ার্কে কাজ করছি, http://prestans.googlecode.com দেখুন
মুহুর্তে এটি আলফার প্রথম দিকে, আমরা মোড_উজি এবং গুগলের অ্যাপজিনির বিরুদ্ধে পরীক্ষা করছি।
পরীক্ষক এবং প্রতিক্রিয়া খুঁজছেন। ধন্যবাদ।