বিশ্রামের নকশার লক্ষ্য কেন?
RESTful নীতিগুলি এমন বৈশিষ্ট্যগুলি নিয়ে আসে যা ওয়েব সাইটগুলিকে API নকশায় ওয়েব সাইটগুলিকে (একটি র্যান্ডম মানব ব্যবহারকারী "তাদের" "সার্ফ" করতে) সহজ করে তোলে তাই প্রোগ্রামার ব্যবহারকারীর পক্ষে এগুলি সহজ। REST ভাল না কারণ এটি REST, এটি ভাল কারণ এটি ভাল। এটি বেশিরভাগ ক্ষেত্রেই সহজ কারণ এটি সহজ ।
সরল এইচটিটিপি (এসওএপি খাম এবং একক-ইউআরআই ওভারলোডেড POST
পরিষেবাদি ব্যতীত) এর সরলতা , যা কিছুকে "বৈশিষ্ট্যের অভাব" বলতে পারে , এটি আসলে তার সর্বশ্রেষ্ঠ শক্তি । ব্যাট থেকে সরাসরি, এইচটিটিপি আপনাকে সম্বোধনযোগ্যতা এবং রাষ্ট্রহীনতা থাকতে বলেছে : দুটি বেসিক ডিজাইনের সিদ্ধান্ত যা এইচটিটিপি আজকের মেগা সাইটগুলিতে (এবং মেগা-পরিষেবাগুলি) স্কেলযোগ্য রাখে।
তবে REST সিলভার বুলেট নয়: কখনও কখনও একটি আরপিসি-স্টাইল ("রিমোট প্রসেসার কল" - যেমন এসওএপি) উপযুক্ত হতে পারে এবং কখনও কখনও অন্যান্য প্রয়োজনীয়তাগুলি ওয়েবে গুণাবলীর চেয়ে বেশি প্রাধান্য পায়। ্রফ. আমরা আসলে যা পছন্দ করি না তা হ'ল অযথা জটিলতা । প্রায়শই একজন প্রোগ্রামার বা কোনও সংস্থা একটি কাজের জন্য আরপিসি-স্টাইল পরিষেবাদি নিয়ে আসে যা সাধারণ পুরানো এইচটিটিপি ঠিক জরিমানা করতে পারে। এর প্রভাবটি হ'ল এইচটিটিপি একটি বিরাট এক্সএমএল পে-লোডের জন্য পরিবহণ প্রোটোকলে কমিয়ে দেওয়া হয়েছে যা "সত্যই" কী চলছে তা ব্যাখ্যা করে (ইউআরআই বা এইচটিটিপি পদ্ধতিটি এ সম্পর্কে কোনও ধারণা দেয় না)। ফলস্বরূপ পরিষেবাটি অত্যন্ত জটিল, ডিবাগ করা অসম্ভব এবং আপনার ক্লায়েন্টদের বিকাশকারীদের উদ্দেশ্য হিসাবে সঠিক সেটআপ না করা পর্যন্ত কাজ করবে না ।
একইভাবে একটি জাভা / সি # কোড অবজেক্ট-ভিত্তিক হতে পারে না , কেবল এইচটিটিপি ব্যবহার করে কোনও নকশা আরএসএসফুল হয় না। ক্রিয়াকলাপ এবং দূরবর্তী পদ্ধতির দিক থেকে তাদের পরিষেবাদি সম্পর্কে চিন্তাভাবনার তাড়নায় কেউ ধরা পড়তে পারে । এতে আশ্চর্য হওয়ার কিছু নেই যে এটি বেশিরভাগই আরপিসি-স্টাইল পরিষেবাদিতে (বা একটি REST-RPC- সংকর) শেষ করবে। প্রথম পদক্ষেপটি ভিন্নভাবে চিন্তা করা। একটি আরামদায়ক নকশা বিভিন্ন উপায়ে অর্জিত হতে পারে, একটি উপায় হ'ল আপনার প্রয়োগ সম্পর্কে সম্পদের দিক থেকে চিন্তা করা, কর্ম নয়:
Actions কর্মের দিক থেকে চিন্তা করার পরিবর্তে এটি সম্পাদন করতে পারে ("মানচিত্রে স্থানগুলির জন্য অনুসন্ধান করুন") ...
... সেই ক্রিয়াগুলির ফলাফলের দিক দিয়ে ভাবার চেষ্টা করুন ("মানচিত্রের অনুসন্ধানের মানদণ্ডের সাথে মিলে যায় এমন জায়গাগুলির তালিকা")।
আমি নীচের উদাহরণের জন্য যাব। (আরএসটি-র অন্যান্য মূল বিষয় হেটোয়াসের ব্যবহার - আমি এটি এখানে ব্রাশ করি না, তবে আমি অন্য পোস্টে এটি সম্পর্কে দ্রুত কথা বলি ))
প্রথম ডিজাইন ইস্যু
চলুন একবার দেখে নেওয়া যাক প্রস্তাবিত নকশা:
ACTION http://api.animals.com/v1/dogs/1/
প্রথমে, আমাদের একটি নতুন এইচটিটিপি ক্রিয়া ( ACTION
) তৈরি করার কথা ভাবা উচিত নয় । সাধারণভাবে বলতে গেলে, এটি বেশ কয়েকটি কারণে অনাকাঙ্ক্ষিত :
- (1) কেবলমাত্র ইউআরআই পরিষেবা দেওয়া, একজন "এলোমেলো" প্রোগ্রামার কীভাবে জানবে
ACTION
ক্রিয়াটি বিদ্যমান?
- (২) প্রোগ্রামার যদি এটি জানে তবে সে এর শব্দার্থক কীভাবে জানবে? সেই ক্রিয়াটির অর্থ কী?
- (3) কোন বিশেষণ (সুরক্ষা, আদর্শ) এর ক্রিয়াটি প্রত্যাশা করা উচিত?
- (4) যদি প্রোগ্রামারটির খুব সাধারণ ক্লায়েন্ট থাকে যা কেবলমাত্র স্ট্যান্ডার্ড এইচটিটিপি ক্রিয়াকলাপ পরিচালনা করে?
- (5) ...
এখন আসুন ব্যবহার বিবেচনা করুনPOST
(আমি নীচে কেন এটির জন্য আলোচনা করব, কেবল এখনই এটির জন্য আমার শব্দটি গ্রহণ করুন):
POST /v1/dogs/1/ HTTP/1.1
Host: api.animals.com
{"action":"bark"}
এটি ঠিক হতে পারে ... তবে কেবল যদি :
{"action":"bark"}
একটি দলিল ছিল; এবং
/v1/dogs/1/
ছিল একটি "ডকুমেন্ট প্রসেসর" (কারখানার মতো) ইউআরআই। একটি "ডকুমেন্ট প্রসেসর" এমন একটি ইউআরআই যা আপনি কেবল "জিনিসগুলিতে নিক্ষেপ" এবং তাদের সম্পর্কে "ভুলে যেতে" চান - প্রসেসর আপনাকে "নিক্ষেপ" করার পরে একটি নতুন তৈরি উত্সে পুনর্নির্দেশ করতে পারে। উদাহরণস্বরূপ একটি বার্তা দালাল পরিষেবাতে বার্তা পোস্ট করার জন্য ইউআরআই, যা পোস্ট করার পরে আপনাকে এমন একটি ইউআরআই-এ স্থানান্তরিত করে যা বার্তার প্রসেসিংয়ের স্থিতি দেখায়।
আমি আপনার সিস্টেম সম্পর্কে খুব বেশি কিছু জানি না, তবে আমি ইতিমধ্যে বাজি দিয়েছি যে উভয়ই সত্য নয়:
{"action":"bark"}
কোনও দস্তাবেজ নয় , এটি আসলে সেই পদ্ধতি যা আপনি পরিষেবাতে নিনজা-গোপন করার চেষ্টা করছেন ; এবং
/v1/dogs/1/
কোনো URI একটি "কুকুর" রিসোর্স (সম্ভবত সঙ্গে কুকুর প্রতিনিধিত্ব করে id==1
) এবং একটি নথি প্রসেসর।
সুতরাং আমরা এখন যা জানি কেবল এটিই হ'ল উপরের নকশাটি এত বিশ্রামের নয়, তবে এটি ঠিক কী? এ সম্পর্কে এত খারাপ কী? মূলত, এটি খারাপ কারণ এটি জটিল অর্থ সহ জটিল ইউআরআই। আপনি এটি থেকে কিছু অনুমান করতে পারবেন না। একজন প্রোগ্রামার কীভাবে জানতে bark
পারে যে একটি কুকুরের এমন ক্রিয়া রয়েছে যা গোপনে POST
এটিতে প্রবেশ করতে পারে ?
আপনার প্রশ্নের API কলগুলি ডিজাইন করা
সুতরাং আসুন তাড়া করা যাক এবং উত্সগুলির শর্তাবলী বিবেচনা করে এই ছালাগুলি যথাযথভাবে ডিজাইনের চেষ্টা করি । আমাকে বাকি ওয়েব সার্ভিস বইয়ের উদ্ধৃতি দেওয়ার অনুমতি দিন :
একটি POST
অনুরোধ বিদ্যমান বিদ্যমান থেকে একটি নতুন সংস্থান তৈরি করার প্রচেষ্টা। বিদ্যমান সংস্থানটি ডেটা-কাঠামোর দিক থেকে নতুনটির পিতা বা মাতা হতে পারে, গাছের মূল যেভাবে হয় তার সমস্ত পাতার নোডের পিতামাতা। বা বিদ্যমান সংস্থানগুলি একটি বিশেষ "কারখানার" সংস্থান হতে পারে
যার একমাত্র উদ্দেশ্য অন্যান্য সংস্থান উত্পন্ন করা। একটি POST
অনুরোধের সাথে প্রেরিত উপস্থাপনা নতুন সংস্থার প্রাথমিক অবস্থা বর্ণনা করে। PUT হিসাবে, একটি POST
অনুরোধ মোটেও একটি উপস্থাপনা অন্তর্ভুক্ত করা প্রয়োজন।
উপরের বর্ণনার পরে আমরা দেখতে পাচ্ছি যে এটির একটি সাবসোর্সbark
হিসাবে মডেল করা যেতে পারে (যেহেতু একটি কুকুরের মধ্যে রয়েছে , অর্থাত্dog
কুকুরটি একটি কুকুর দ্বারাbark
"ছাঁটাই" )।
এই যুক্তি থেকে আমরা ইতিমধ্যে পেয়েছি:
- পদ্ধতিটি হ'ল
POST
- সংস্থানটি হ'ল
/barks
কুকুরের সাবসোর্স:, /v1/dogs/1/barks
একটি bark
"কারখানার" প্রতিনিধিত্ব করে । যে ইউআরআই প্রতিটি কুকুরের জন্য অনন্য (যেহেতু এটি অধীন রয়েছে /v1/dogs/{id}
)।
এখন আপনার তালিকার প্রতিটি ক্ষেত্রে একটি নির্দিষ্ট আচরণ রয়েছে।
1. বাকল কেবল একটি ইমেল প্রেরণ করে dog.email
এবং কিছুই রেকর্ড করে না।
প্রথমতঃ, কি বারিং (কোনও ইমেল প্রেরণ করা) একটি সিনক্রোনাস বা অ্যাসিঙ্ক্রোনাস টাস্ক? দ্বিতীয়ত bark
অনুরোধটির জন্য কোনও নথির প্রয়োজন (ই-মেইল, সম্ভবত) বা এটি খালি?
1.1 বাকল কোনও ইমেল প্রেরণ করে dog.email
এবং কিছুই রেকর্ড করে না (সিনক্রোনাস টাস্ক হিসাবে)
এই ক্ষেত্রে সহজ। barks
কারখানার রিসোর্সে কল করার সাথে সাথে একটি ছাল পাওয়া যায় (একটি ইমেল প্রেরিত) এখনই এবং প্রতিক্রিয়া (ঠিক আছে বা না থাকলে) এখনই দেওয়া হবে:
POST /v1/dogs/1/barks HTTP/1.1
Host: api.animals.com
Authorization: Basic mAUhhuE08u724bh249a2xaP=
(entity-body is empty - or, if you require a **document**, place it here)
200 OK
এটি রেকর্ড হিসাবে (পরিবর্তন) কিছুই, 200 OK
যথেষ্ট। এটি দেখায় যে সবকিছু প্রত্যাশার মতো চলে গেছে।
১.২ বার্ক একটি ইমেল প্রেরণ করে dog.email
এবং কিছুই রেকর্ড করে না (একটি অ্যাসিনক্রোনাস টাস্ক হিসাবে)
এই ক্ষেত্রে, ক্লায়েন্টের অবশ্যই bark
কাজটি ট্র্যাক করার একটি উপায় থাকতে হবে । bark
কাজের তারপর, এটা নিজস্ব কোনো URI সঙ্গে একটি সম্পদ থাকা উচিত .:
POST /v1/dogs/1/barks HTTP/1.1
Host: api.animals.com
Authorization: Basic mAUhhuE08u724bh249a2xaP=
{document body, if needed;
NOTE: when possible, the response SHOULD contain a short hypertext note with a hyperlink
to the newly created resource (bark) URI, the same returned in the Location header
(also notice that, for the 202 status code, the Location header meaning is not
standardized, thus the importance of a hipertext/hyperlink response)}
202 Accepted
Location: http://api.animals.com/v1/dogs/1/barks/a65h44
এইভাবে, প্রতিটি bark
সনাক্তযোগ্য able ক্লায়েন্ট তারপর একটি ইস্যু করতে পারে GET
থেকে bark
এটি সাম্প্রতিক রাষ্ট্র নিশ্চিত করে জেনে নিতে কোনো URI। এমনকি DELETE
এটি বাতিল করতে একটি ব্যবহার করুন ।
২. বাকল একটি ইমেল প্রেরণ করে dog.email
এবং তারপরে dog.barkCount
1 দ্বারা বর্ধিত হয়
আপনি যদি ক্লায়েন্টকে জানাতে চান তবে এই dog
সংস্থানটি পরিবর্তিত হয়ে উঠতে পারে:
POST /v1/dogs/1/barks HTTP/1.1
Host: api.animals.com
Authorization: Basic mAUhhuE08u724bh249a2xaP=
{document body, if needed; when possible, containing a hipertext/hyperlink with the address
in the Location header -- says the standard}
303 See Other
Location: http://api.animals.com/v1/dogs/1
এই ক্ষেত্রে, location
শিরোনামের উদ্দেশ্য হ'ল ক্লায়েন্টকে জানানো উচিত যে তার একবার নজর দেওয়া উচিত dog
। এইচটিটিপি আরএফসি303
থেকে :
এই পদ্ধতিটি প্রাথমিকভাবে POST
অ্যাক্টিভেটেড স্ক্রিপ্টের আউটপুটটিকে ব্যবহারকারী এজেন্টকে একটি নির্বাচিত সংস্থায় পুনঃনির্দেশ করার অনুমতি দেওয়ার জন্য বিদ্যমান
।
যদি কাজটি bark
অ্যাসিক্রোনাস হয় তবে 1.2
পরিস্থিতিটির মতো একটি সাব্রোসোর্স প্রয়োজন এবং টাস্ক সম্পূর্ণ হওয়ার পরে একটিটি 303
ফিরে দেওয়া উচিত GET .../barks/Y
।
3. বাকলটি যখন ছালটি ঘটে তখন রেকর্ডিংয়ের bark
সাথে একটি নতুন রেকর্ড তৈরি করে bark.timestamp
। এটি বৃদ্ধি করেও dog.barkCount
১।
POST /v1/dogs/1/barks HTTP/1.1
Host: api.animals.com
Authorization: Basic mAUhhuE08u724bh249a2xaP=
(document body, if needed)
201 Created
Location: http://api.animals.com/v1/dogs/1/barks/a65h44
এখানে, bark
অনুরোধের কারণে এটি তৈরি করা হয়েছে, সুতরাং স্থিতি 201 Created
প্রয়োগ করা হয়।
যদি সৃষ্টিটি অ্যাসিক্রোনাস হয় তবে পরিবর্তে এটির202 Accepted
প্রয়োজন ( যেমন HTTP আরএফসি বলেছে )।
টাইমস্ট্যাম্প সংরক্ষণ করা bark
সম্পদের একটি অংশ এবং GET
এটিতে এটি দিয়ে পুনরুদ্ধার করা যেতে পারে । আপডেট কুকুর এছাড়াও "নথিভুক্ত" হতে পারে GET dogs/X/barks/Y
।
4. ছাল গিথুব থেকে কুকুর কোডের সর্বশেষতম সংস্করণটি টানতে একটি সিস্টেম কমান্ড চালায়। এটি তখন dog.owner
তাদের কাছে একটি পাঠ্য বার্তা প্রেরণ করে যে নতুন কুকুর কোডটি প্রস্তুত রয়েছে in
এইটির কথাটি জটিল, তবে এটি প্রায় একটি সাধারণ অ্যাসিনক্রোনাস কাজ:
POST /v1/dogs/1/barks HTTP/1.1
Host: api.animals.com
Authorization: Basic mAUhhuE08u724bh249a2xaP=
(document body, if needed)
202 Accepted
Location: http://api.animals.com/v1/dogs/1/barks/a65h44
ক্লায়েন্ট তারপরে বর্তমান অবস্থা জানার GET
জন্য এস প্রদান করবে /v1/dogs/1/barks/a65h44
(যদি কোডটি টানা থাকে তবে এটি ইমেলটি মালিকের কাছে প্রেরণ করা হয়েছিল এবং এ জাতীয়)। যখনই কুকুর পরিবর্তন হয়, একটি 303
প্রশংসনীয়।
মোড়ক উম্মচন
রয় ফিল্ডিংয়ের উদ্ধৃতি :
আরআরইএসটিগুলির পদ্ধতির জন্য কেবলমাত্র প্রয়োজনীয় জিনিস হ'ল এগুলি সমস্ত সংস্থার জন্য সমানভাবে সংজ্ঞায়িত করা উচিত (যেমন, যাতে অনুরোধটির অর্থ বোঝার জন্য মধ্যস্থতাকারীদের উত্সের ধরণটি জানতে না হয়)।
উপরের উদাহরণগুলিতে, POST
অভিন্নভাবে ডিজাইন করা হয়েছে। এটি কুকুরটিকে তৈরি করবে " bark
" এটি নিরাপদ নয় (অর্থের মধ্যে ছালের প্রভাব রয়েছে), এবং না আদর্শবান (প্রতিটি অনুরোধ একটি নতুন ফল দেয় bark
), যা POST
ক্রিয়াটি ভালভাবে ফিট করে ।
প্রোগ্রামার জানতে চাই: একটি POST
থেকে barks
উৎপাদনের একটি bark
। প্রতিক্রিয়া স্থিতি কোডগুলি (প্রয়োজন অনুসারে সত্তা-দেহ এবং শিরোনামগুলির সাথেও) কী পরিবর্তন হয়েছে এবং কীভাবে ক্লায়েন্ট কীভাবে এগিয়ে যেতে পারে এবং কীভাবে এগিয়ে যেতে হবে তা ব্যাখ্যা করার কাজ করে।
দ্রষ্টব্য: ব্যবহৃত প্রাথমিক উত্সগুলি হ'ল : " রেস্টফুল ওয়েব সার্ভিসেস " বই, এইচটিটিপি আরএফসি এবং রায় ফিল্ডিংয়ের ব্লগ ।
সম্পাদনা:
প্রথমবার তৈরি হওয়ার পরে প্রশ্ন এবং উত্তরটি বেশ খানিকটা বদলে গেছে। মূল প্রশ্ন কোনো URI মত ডিজাইন সম্পর্কে জিজ্ঞেস করেন:
ACTION http://api.animals.com/v1/dogs/1/?action=bark
এটি কেন ভাল পছন্দ নয় তার ব্যাখ্যা নীচে:
ক্লায়েন্টরা কীভাবে সার্ভারকে ডেটা দিয়ে কী করতে বলে তা হল পদ্ধতি সম্পর্কিত তথ্য ।
- RESTful ওয়েব পরিষেবাদি HTTP পদ্ধতিতে পদ্ধতির তথ্য সরবরাহ করে।
- সাধারণ আরপিসি-স্টাইল এবং এসওএপি পরিষেবাগুলি তাদের সত্তা-দেহ এবং এইচটিটিপি শিরোনামে রাখে।
কোন অংশ ডেটার [ক্লায়েন্ট চায় সার্ভার] এ অপারেট হয় scoping তথ্য ।
- বিশ্রামের পরিষেবাগুলি ইউআরআই ব্যবহার করে। এসওএপি / আরপিসি-স্টাইল পরিষেবাগুলি আবার সত্তা-দেহ এবং এইচটিটিপি শিরোনাম ব্যবহার করে।
উদাহরণ হিসাবে, গুগলের ইউআরআই নিন http://www.google.com/search?q=DOG
। সেখানে, পদ্ধতি সম্পর্কিত তথ্য GET
এবং স্কোপিংয়ের তথ্য /search?q=DOG
।
দীর্ঘ সংক্ষিপ্ত বিবরণ:
- ইন RESTful আর্কিটেকচারের , পদ্ধতি তথ্য HTTP- র পদ্ধতি মধ্যে যায়।
- ইন রিসোর্স ওরিয়েন্টড আর্কিটেকচার , scoping তথ্য কোনো URI মধ্যে যায়।
এবং থাম্বের নিয়ম:
যদি HTTP পদ্ধতিটি পদ্ধতির তথ্যের সাথে মেলে না, তবে পরিষেবাটি বিশ্রামের নয়। যদি স্কোপিংয়ের তথ্য ইউআরআইতে না থাকে তবে পরিষেবাটি সংস্থান-ভিত্তিক নয়।
আপনি "ছাল" "ক্রিয়া" টি ইউআরএল (বা সত্তা-দেহে) রাখতে এবং ব্যবহার করতে পারেন POST
। সেখানে কোনও সমস্যা নেই, এটি কাজ করে এবং এটি করার সহজতম উপায় হতে পারে তবে এটি আরামদায়ক নয় ।
আপনার পরিষেবাটি সত্যিই বিশ্রামের জন্য আপনাকে একটি পদক্ষেপ ফিরে নিতে হবে এবং আপনি এখানে কী করতে চান তা নিয়ে ভাবতে হবে (এটি সংস্থানগুলির উপর কী প্রভাব ফেলবে)।
আমি আপনার নির্দিষ্ট ব্যবসায়ের প্রয়োজন সম্পর্কে কথা বলতে পারি না, তবে আমি আপনাকে একটি উদাহরণ দিতে পারি: একটি বিশ্রামযুক্ত অর্ডারিং পরিষেবা বিবেচনা করুন যেখানে ইউআরআইতে অর্ডার পছন্দ হয় example.com/order/123
।
এখন বলুন আমরা একটি অর্ডার বাতিল করতে চাই, আমরা এটি কীভাবে করব? কেউ "বিলোপ" "ক্রিয়া" এবং এটির মতো ডিজাইন করার জন্য প্ররোচিত হতে পারে POST example.com/order/123?do=cancel
।
এটি বিশ্রামের মতো নয়, যেমন আমরা উপরে আলোচনা করেছি। পরিবর্তে, আমরা এটিকে পাঠানো একটি উপাদান সহ একটি PUT
নতুন উপস্থাপনা হতে পারে :order
canceled
true
PUT /order/123 HTTP/1.1
Content-Type: application/xml
<order id="123">
<customer id="89987">...</customer>
<canceled>true</canceled>
...
</order>
এবং এটাই. যদি অর্ডারটি বাতিল করা না যায়, তবে একটি নির্দিষ্ট স্থিতি কোড ফেরত দেওয়া যেতে পারে। ( POST /order/123/canceled
সত্তা-দেহের মতো একটি সাবসোর্স ডিজাইন true
সরলতার জন্যও উপলভ্য হতে পারে))
আপনার নির্দিষ্ট দৃশ্যে, আপনি অনুরূপ কিছু চেষ্টা করতে পারেন। এই ভাবে, যখন একটি কুকুর ঘেউ ঘেউ করা হয়, উদাহরণস্বরূপ, একটি GET
সময়ে /v1/dogs/1/
সেই তথ্য অন্তর্ভুক্ত হতে পারে (যেমন <barking>true</barking>
) । বা ... যদি এটি খুব জটিল হয় তবে আপনার বিশ্রামের প্রয়োজনীয়তাটি আলগা করুন এবং এতে আঁকুন POST
।
হালনাগাদ:
আমি উত্তরটি খুব বড় করতে চাই না, তবে সংস্থানগুলির এক সেট হিসাবে একটি অ্যালগরিদম (একটি ক্রিয়া ) প্রকাশের হ্যাং পেতে এটি কিছুটা সময় নেয় । ক্রিয়া পদ চিন্তা করার পরিবর্তে ( "মানচিত্র এ স্থান অনুসন্ধান করা" এক চাহিদা ক্রিয়াটি (ফলাফল পরিপ্রেক্ষিতে মনে করা), "একটি অনুসন্ধানের মিলে মানচিত্রে থাকা স্থানগুলির তালিকা" )।
আপনি যদি দেখতে পান যে আপনার ডিজাইনটি এইচটিটিপির ইউনিফর্ম ইন্টারফেসের সাথে ফিট করে না তবে আপনি নিজেকে এই পদক্ষেপে ফিরে আসতে পারেন back
ক্যোয়ারী ভেরিয়েবল হয় তথ্য scoping কিন্তু কি না বোঝাতে নতুন সম্পদগুলি ( /post?lang=en
পরিষ্কারভাবে হয় একই হিসাবে রিসোর্স /post?lang=jp
, শুধু একটি বিভিন্ন উপস্থাপনা)। বরং বোঝাতে ব্যবহার করা হয় ক্লায়েন্ট রাষ্ট্র (যেমন ?page=10
; যাতে রাষ্ট্র সার্ভার রাখা হয় না ?lang=en
এখানে একটি উদাহরণও নেই) অথবা ইনপুট প্যারামিটার করার আলগোরিদিমিক সম্পদ ( /search?q=dogs
, /dogs?code=1
)। আবার স্বতন্ত্র সংস্থান নয়।
HTTP ক্রিয়াগুলির (পদ্ধতি) বৈশিষ্ট্য:
আর একটি পরিষ্কার পয়েন্ট যা ?action=something
ইউআরআইতে দেখায় এটি বিশ্রামযোগ্য নয়, এটি এইচটিটিপি ক্রিয়াগুলির বৈশিষ্ট্য:
GET
এবং HEAD
নিরাপদ (এবং আদর্শবান);
PUT
এবং DELETE
কেবল আদর্শবান;
POST
না হয়।
সুরক্ষা : একটি GET
বা HEAD
অনুরোধটি কোনও ডেটা পড়ার অনুরোধ , কোনও সার্ভারের স্থিতি পরিবর্তন করার অনুরোধ নয়। ক্লায়েন্টটি 10 বার একটি আবেদন করতে GET
বা HEAD
অনুরোধ করতে পারে এবং এটি একবারে তৈরি করা বা এটি কখনই তৈরি করার মতো নয় ।
আদর্শবাদিতা : আপনি এটি একবারে বা একাধিকবার প্রয়োগ করেছেন কিনা তা ক্ষেত্রে একই আদর্শ রয়েছে এমন একটি আদর্শ আদর্শ অপারেশন (গণিতে, শূন্যের দ্বারা গুণিত করা আদর্শবান)। যদি আপনি DELETE
একবার রিসোর্স করেন, আবার মুছে ফেলার ক্ষেত্রে একই প্রভাব থাকবে (উত্সটি GONE
ইতিমধ্যে রয়েছে)।
POST
নিরাপদ বা আদর্শবানও নয়। POST
কোনও 'কারখানা' সংস্থানতে দুটি অনুরূপ অনুরোধ করার ফলে সম্ভবত একই তথ্যযুক্ত দুটি অধস্তন সংস্থার ফলাফল হবে। অতিরিক্ত লোড (ইউআরআই বা সত্তা-শরীরে পদ্ধতি) সহ POST
, সমস্ত বেট বন্ধ রয়েছে।
এই দুটি বৈশিষ্ট্যই এইচটিটিপি প্রোটোকলের সাফল্যের জন্য গুরুত্বপূর্ণ ছিল (অবিশ্বস্ত নেটওয়ার্কের ওপরে!): GET
পৃষ্ঠাটি সম্পূর্ণ লোড না হওয়া পর্যন্ত আপনি কতবার আপডেট করেছেন ( )?
কোনও ক্রিয়া তৈরি করা এবং এটি ইউআরএল স্থাপন করা পরিষ্কারভাবে এইচটিটিপি পদ্ধতিগুলির চুক্তিটি ভঙ্গ করে। আবারও, প্রযুক্তি আপনাকে অনুমতি দেয়, আপনি এটি করতে পারেন, তবে এটি বিশ্রামের নকশা নয়।