REST এপিআই সেরা অভ্যাস: পরামিতিগুলি কোথায় রাখবেন? [বন্ধ]


348

একটি REST এপিআই এর কমপক্ষে দুটি উপায়ে প্যারামিটার থাকতে পারে:

  1. ইউআরএল-পাথের অংশ হিসাবে (যেমন /api/resource/parametervalue )
  2. কোয়েরি যুক্তি হিসাবে (যেমন /api/resource?parameter=value )

এখানে সেরা অনুশীলন কি? 1 এবং কখন 2 ব্যবহার করার জন্য কোনও সাধারণ নির্দেশিকা রয়েছে?

বাস্তব বিশ্বের উদাহরণ: টুইটার অন্তরগুলি নির্দিষ্ট করার জন্য ক্যোয়ারী প্যারামিটার ব্যবহার করে। ( http://api.twitter.com/1/statuses/home_timeline.json?since_id=12345&max_id=54321)

এই পরামিতিগুলি ইউআরএল পথে রাখার জন্য এটি আরও ভাল ডিজাইন হিসাবে বিবেচিত হবে?

উত্তর:


254

যদি নথিভুক্ত সেরা অনুশীলনগুলি থাকে তবে আমি সেগুলি এখনও পাইনি। তবে, ইউআরএল-এ প্যারামিটারগুলি কোথায় রাখবেন তা নির্ধারণ করার সময় আমি কয়েকটি গাইডলাইন ব্যবহার করছি:

Queryচ্ছিক পরামিতিগুলি ক্যোরি স্ট্রিংয়ে রাখা আরও সহজ হতে থাকে।

প্যারামিটার মানটি যদি কোনও বিদ্যমান উত্সের সাথে সঙ্গতিপূর্ণ না হয় আপনি যদি 404 ত্রুটি ফিরে আসতে চান তবে আমি কোনও পথ সেগমেন্টের প্যারামিটারের দিকে ঝোঁক দেব। যেমন /customer/232232 কোনও বৈধ গ্রাহক আইডি নয় id

তবে আপনি যদি খালি তালিকা ফিরে আসতে চান তবে প্যারামিটারটি পাওয়া না গেলে আমি কোয়েরি স্ট্রিং প্যারামিটারগুলি ব্যবহার করার পরামর্শ দিই। যেমন/contacts?name=dave

যদি কোনও প্যারামিটার আপনার ইউআরআই স্পেসের পুরো সাবট্রিগুলিকে প্রভাবিত করে তবে একটি পথ বিভাগটি ব্যবহার করুন। যেমন একটি ভাষার প্যারামিটার /en/document/foo.txt বনাম/document/foo.txt?language=en

আমি কোনও ক্যোয়ারী প্যারামিটারের পরিবর্তে পাথ সেগমেন্টে থাকা অনন্য শনাক্তকারীদের পছন্দ করি।

ইউআরআইয়ের জন্য সরকারী নিয়মগুলি এখানে এই আরএফসি স্পেসে পাওয়া যায় । এখানে আর একটি খুব দরকারী আরএফসি স্পেক রয়েছে যা ইউআরআইকে প্যারামিটারাইজ করার নিয়মকে সংজ্ঞায়িত করে।


5
সরকারী নিয়ম ইউআরআই এবং খসড়া সিপিসি সত্যিই দরকারী এবং আকর্ষণীয় ছিল! :-)
কাজম্যাগনুস

1
404 ত্রুটি পরীক্ষা আমাকে ক্যোয়ারী প্যারামিটার, শিরোলেখ বা অনুরোধের অংশের মালিকানাধীন পাথের মধ্যে তথ্য স্থাপন এড়াতে অনেক সাহায্য করে। যে পয়েন্ট জন্য ধন্যবাদ!
কেভিন কন্ডন

152

দেরিতে উত্তর তবে আমি যা ভাগ করে নেওয়া হয়েছে তার সাথে কিছু অতিরিক্ত অন্তর্দৃষ্টি যুক্ত করব, যথা একটি অনুরোধে বিভিন্ন ধরণের "পরামিতি" রয়েছে এবং আপনার এটি বিবেচনায় নেওয়া উচিত।

  1. সনাক্তকারী - যেমন আইডি বা ক্রিয়া / ভিউ হিসাবে উদ্বৃত্ত সংস্থান সনাক্তকারী
  2. ফিল্টারগুলি - উদাহরণস্বরূপ প্যারামিটারগুলি ফলাফলের সেটকে বাছাই বা সংকীর্ণ করতে একটি অনুসন্ধান সরবরাহ করে।
  3. রাজ্য - উদাহরণস্বরূপ অধিবেশন শনাক্তকরণ, এপিআই কীগুলি, whetvs।
  4. সামগ্রী - উদাহরণস্বরূপ তথ্য সংরক্ষণ করতে হবে।

এখন আসুন বিভিন্ন জায়গাগুলি দেখুন যেখানে এই প্যারামিটারগুলি যেতে পারে।

  1. শিরোনাম এবং কুকিজ অনুরোধ
  2. ইউআরএল ক্যোয়ারী স্ট্রিং ("জিইটি" ওয়ার্স)
  3. ইউআরএল পাথ
  4. বডি কোয়েরি স্ট্রিং / মাল্টিপার্ট ("POST" বার)

সাধারণত আপনি কীভাবে রাষ্ট্রের তথ্য তা নির্ভর করে শিরোনাম বা কুকিগুলিতে রাজ্য সেট করা চাই। আমি মনে করি আমরা সকলেই এতে একমত হতে পারি। আপনার প্রয়োজন হলে কাস্টম HTTP শিরোনাম (এক্স-মাই-শিরোলেখ) ব্যবহার করুন।

একইভাবে, সামগ্রীর কেবলমাত্র অনুরোধের জন্য একটি জায়গা রয়েছে, যা অনুরোধের শৃঙ্খলে হয়, হয় কোয়েরি স্ট্রিং বা HTTP মাল্টিপার্ট এবং / অথবা JSON সামগ্রী হিসাবে। এটি যখন আপনাকে সামগ্রী প্রেরণ করে আপনি সার্ভার থেকে যা পান তার সাথে সামঞ্জস্যপূর্ণ। সুতরাং আপনার অভদ্র হওয়া উচিত নয় এবং এটি অন্যভাবে করা উচিত।

"আইডি = 5" বা "অ্যাকশন = রিফ্রেশ" বা "পৃষ্ঠা = 2" এর মতো স্থান নির্ধারণকারীগুলি ইউআরএল পাথ হিসাবে থাকা বোঝাতে সক্ষম হবে, যেমন mysite.com/article/5/page=2প্রতিটি অংশের অর্থ কী তা আংশিকভাবে আপনি জানেন যে (নিবন্ধ এবং মূল বিষয়গুলির মূল বিষয়গুলি 5 অবশ্যই স্পষ্টভাবে আমাকে আইডি 5 সহ টাইপ নিবন্ধের ডেটা পান) এবং অতিরিক্ত প্যারামিটারগুলি ইউআরআইয়ের অংশ হিসাবে নির্দিষ্ট করা হয়। এগুলি আকারে হতে পারে page=2, বা page/2আপনি যদি জানেন যে ইউআরআই-র নির্দিষ্ট পয়েন্টের পরে "ফোল্ডারগুলি" কী-মান যুক্ত হয়।

ফিল্টারগুলি সর্বদা ক্যোয়ারী স্ট্রিংয়ে থাকে, কারণ তারা সঠিক তথ্য সন্ধানের একটি অংশ হয়ে গেলেও কেবলমাত্র লোকেটরা কীভাবে ফিরে আসে সেগুলির একটি উপসেট বা পরিবর্তন ফিরে আসে। mysite.com/article/?query=Obama(সাবসেট) অনুসন্ধানটি একটি ফিল্টার এবং তেমনি /article/5?order=backwards(পরিবর্তন)। এটি কী বলে, কেবল এটি কী বলা হয় তা নিয়ে চিন্তা করুন!

যদি "ভিউ" আউটপুট ফর্ম্যাটটি নির্ধারণ করে, তবে এটি একটি ফিল্টার ( mysite.com/article/5?view=pdf) কারণ এটি কোন সংস্থানটিতে আমরা চাই সেটিতে প্রবেশের পরিবর্তে প্রাপ্ত উত্সটির একটি পরিবর্তন ফিরিয়ে দেয়। যদি এটি পরিবর্তে নিবন্ধের কোন নির্দিষ্ট অংশটি আমরা দেখতে পাই mysite.com/article/5/view=summaryতবে এটি স্থির করে ( ) তবে এটি একটি লোকেটার।

মনে রাখবেন, সংস্থানসমূহের একটি সংকীর্ণকরণ ফিল্টারিং। কোনও উত্সের মধ্যে নির্দিষ্ট কিছু সন্ধান করা হ'ল চিহ্নিত করা হচ্ছে ... ডু। সাবসেট ফিল্টারিং কোনও ফলাফলের (এমনকি 0) ফিরতে পারে। সনাক্তকরণ সর্বদা কোনও কিছুর সুনির্দিষ্ট উদাহরণটি (যদি তা বিদ্যমান থাকে) সন্ধান করবে। পরিবর্তন ফিল্টারিং সংশোধিত ব্যতীত লোকেটারের মতো একই ডেটা ফেরত দেবে (যদি এই জাতীয় পরিবর্তনের অনুমতি দেওয়া হয়)।

আশা করি লোকেরা কোথায় স্টাফ রাখবে তা যদি হারিয়ে যায় তবে লোকেরা কিছু ইউরেক মুহুর্ত দিতে সহায়তা করেছিল!


2
idফিল্টার কেন হয় না ? এটি রিসোর্সের একটি সাবসেট দেয়
জনাথন।

13
@Jonathan। না এটি কোনও নির্দিষ্ট সংস্থান, যথা নিবন্ধের সংখ্যা 5 প্রদান করে returns ফিল্টার হ'ল সম্পদ সংগ্রহের ক্ষেত্রে অনুসন্ধানকে সংকুচিত করার উপায়। আপনি যদি কেবল সেই নির্দিষ্ট সংস্থানটি চান তবে তা পাওয়ার জন্য একটি নির্ধারিত উপায় থাকা উচিত। ফিল্টারিং মানে আপনার একাধিক সংস্থান ফিরে আসার সম্ভাবনা রয়েছে। কোনও আইডি ফিল্টার নয়, এটি একটি নির্দিষ্ট একক সংস্থান। আপনার যদি আইডির একটি রেঞ্জ থাকে, তবে এটি পরিসরে একটি আইডি অন্তর্ভুক্ত করা সত্ত্বেও এটি ফিল্টার হবে। যদি ফিল্টারটিতে বিভিন্ন ধরণের সংস্থানও অন্তর্ভুক্ত থাকে তবে এটি কেবল নিবন্ধটি নয়, আইডি 5 সহ সমস্ত সংস্থান ফিরিয়ে দেবে।
টোর ভ্যালামো

1
@ জনাথন .: ড্যারেল মিলার যেমন উল্লেখ করেছেন, আপনি অবজেক্ট / আইডি তে একটি অজানা আইডির ক্ষেত্রে 404 ফিরিয়ে দেওয়ার অনুরোধ করবেন, যখন আপনি প্রত্যাশা করবেন? আইডি = আইডি ফিরে এবং খালি তালিকা প্রত্যাশা করবে। এছাড়াও, আমি বিবেচনা করব যে কোনও ধরণের ফিল্টারিং / সাবসেটিংয়ের একটি তালিকা ফিরে আসা উচিত।
njzk2

1
পৃষ্ঠাগুলি একটি কঠিন, কারণ আপনি যেহেতু এটি বলছেন এটি কোনও সংস্থান (পৃষ্ঠাগুলির সংগ্রহ) এর ফিল্টার হতে পারে তবে একই সময়ে এটি সেই সংকলনের মধ্যে একটি নির্দিষ্ট উত্স। আমি সর্বদা নিবন্ধের দ্বারা নিবন্ধ পৃষ্ঠার জন্য অনুরোধ করব, ফিল্টার নয়। তবে পৃষ্ঠাটি কোনও কিছুর তালিকার একটি ফিল্টার হতে পারে, ব্যবহারকারীদের একটি তালিকা বলুন say তবে পৃষ্ঠাটি অন্তর্নিহিতভাবে একটি ডিলিমিটার, ওরফে "আইটেমটি শুরু করুন (page-1)*perpageএবং perpageআইটেমগুলি দেখান "। ফিল্টার হিসাবে এটি ব্যবহার করা ঠিক তখন, তবে বিভিন্ন কারণে। এটিকে "পৃষ্ঠা" বলা কলিকভাবে ভুল। আরও শব্দার্থগতভাবে এটি সঠিক হতে হবে এটিকে "থেকে" বা "স্টার্টআট" বলা হবে
টোর

1
(অবিরত) "পৃষ্ঠা" এর অর্থগত অর্থ হ'ল এটি একটি নির্দিষ্ট সংস্থান যা পরিবর্তন হয় না। এটি শারীরিক মুদ্রণ থেকে আসে। আমাদের কাছে কখনই বই বা মুদ্রিত স্টাফ না থাকলে "পৃষ্ঠা" সত্যিই একটি শব্দ হত না। আপনার যদি আইটেমগুলির একটি গতিশীল তালিকা থাকে তবে "পৃষ্ঠাগুলি" তে বিভক্ত হয়, আপনার সত্যিকার অর্থে একটি নির্দিষ্ট প্রারম্ভিক বিন্দু সরবরাহ করা উচিত, হয় সংখ্যাসূচক, বর্ণানুক্রমিক বা এমনকি আইটেম-নির্দিষ্ট, পাশাপাশি "প্রতি পৃষ্ঠায় কতগুলি" ফিল্টার। আমি যদি আপনার তালিকার কিছু উল্লেখ করতে চাই তবে আমি বিশদগুলি চাই। এছাড়াও আমি পাতা 5 শুধুমাত্র যেতে উপলব্ধি করা আপনি এখন অভ্যন্তরীণ পরিবর্তন করেছি চাই না perpage50 20 পরিবর্তে করার
তোর Valamo

21

এটি একটি নকশার উপর নির্ভর করে। এইচটিটিপি-র উপর বিশ্রামে ইউআরআইয়ের জন্য কোনও নিয়ম নেই (মূল বিষয়টি হ'ল তারা অনন্য)। প্রায়শই এটি স্বাদ এবং স্বজ্ঞাততার বিষয়টি আসে ...

আমি নিম্নলিখিত পদ্ধতি গ্রহণ:

  • url পাথ-উপাদান: সংস্থান এবং এর পথ-উপাদানটি একটি ডিরেক্টরি ট্রভারসাল এবং একটি সাবসোর্স গঠন করে (যেমন / আইটেম / {আইডি}, / ব্যবহারকারী / আইটেম)। অনিশ্চিত হয়ে যখন আপনার সহকর্মীদের জিজ্ঞাসা করুন, যদি তারা মনে করেন যে এটি ট্র্যাভারসাল এবং তারা "অন্য ডিরেক্টরিতে" মনে করেন সম্ভবত প্যাথ-এলিমেন্টটি সঠিক পছন্দ
  • ইউআরএল প্যারামিটার: যখন সত্যিই কোনও ট্র্যাভারসাল নেই (একাধিক ক্যোয়ারী প্যারামিটারগুলির সাথে অনুসন্ধানের সংস্থানগুলি এটির জন্য খুব সুন্দর উদাহরণ)

1
কোনও ইউআরআই কীভাবে দেখার কথা রয়েছে সে সম্পর্কে প্রকৃতপক্ষে সুস্পষ্ট স্পষ্ট বিধি রয়েছে এবং কীভাবে তাদের বিশ্রামের ইউআরআইতে প্রয়োগ করা যায় সে সম্পর্কে খুব কমই অস্পষ্টতা।
ড্যানম্যান

18

আইএমও প্যারামিটারগুলি কোয়েরি আর্গুমেন্ট হিসাবে ভাল হওয়া উচিত। ইউআরএলটি রিসোর্স সনাক্ত করতে ব্যবহার করা হয়, যখন যুক্ত হওয়া ক্যোয়ারী প্যারামিটারগুলি সংস্থানটির কোন অংশটি চান তা নির্দিষ্ট করতে, সংস্থানটির যে কোনও রাজ্য থাকা উচিত, ইত্যাদি specify


7
প্রকৃতপক্ষে, পথ এবং ক্যোয়ারী উভয়ই সংস্থান ব্যবহার করে সংস্থানটি সনাক্ত করতে। এটি আরএফসি 3986http://labs.apache.org/webarch/uri/rfc/rfc3986.html#query
ড্যারেল মিলার

@ ড্যারেল মিলার আমি জানি এটি একটি পুরাতন পোস্ট তবে আমি উত্সটি সনাক্তকরণের জন্য ফ্যাক্ট ক্যোয়ারী প্যারামিটারগুলি সম্পর্কে আরও জানতে আগ্রহী। আপনার দেওয়া লিঙ্কটি এখন মারা গেছে। আমি আরএফসি 3986 এ দেখেছি কিন্তু আপনি এই সত্যটি কীভাবে অনুগ্রহ করেছেন তা আমি দেখতে পাই না। এছাড়াও, সংজ্ঞা অনুসারে, একটি সনাক্তকারী পরামিতিগুলি alচ্ছিক হওয়া উচিত নয় সুতরাং এটি সনাক্তকরণের জন্য ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করার জন্য বরাদ্দ মনে হয় না।
মিকাইল মারাছে

@MickaelMarrache 3.4 বিভাগে প্রথম লাইন দেখুন tools.ietf.org/html/rfc3986#section-3.4
Darrel মিলার

2
@ ড্যারেল মিলার ধন্যবাদ! আমার প্রশ্নটি এই সত্য থেকে আসে যে সাধারণত, মধ্যস্থতাকারী এইচটিটিপি উপাদানগুলি এমন কোনও অনুরোধের প্রতিক্রিয়াগুলিকে ক্যাশে করে না যেখানে একটি ক্যোরি স্ট্রিং রয়েছে। সুতরাং, মনে হয় যে কোয়েরি প্যারামিটারগুলি কিছু মাপদণ্ড অনুসারে সংস্থানগুলি অনুসন্ধান করার জন্য আরও বেশি বরাদ্দ করা হয়েছে এবং কোনও উত্স অনন্যভাবে চিহ্নিত করতে নয়।
মিকেল মারাছে

17

আরআরএসটি বাস্তবায়ন অনুসারে,

1) পাথ ভেরিয়েবল সম্পদের উপর সরাসরি কর্ম, একটি পরিচিতি বা একটি গান প্রাক্তন মত ব্যবহার করা হয় ..
পেতে ইত্যাদি / API / রিসোর্স / {songid} বা
পান ইত্যাদি / API / রিসোর্স / {contactid} নিজ নিজ ডেটা ফিরিয়ে দেবে।

২) ক্যারিয়ার পার্সম / আর্গুমেন্ট সরাসরি গানের মেটাডেটার মতো সরাসরি সংস্থাগুলির জন্য ব্যবহৃত হয় .., জিইটি / এপি / রিসোর্স / {গানেড}? মেটাডেটা = জেনারগুলি এটি নির্দিষ্ট গানের জেনারগুলির ডেটা ফেরত দেবে।


5
আসলে কোনও রেস্ট স্ট্যান্ডার্ড নেইউইকিপিডিয়া প্রতি : এসওএপি-ভিত্তিক ওয়েব পরিষেবাদির বিপরীতে, আরএসটিফুল ওয়েব এপিআইয়ের জন্য কোনও "অফিসিয়াল" মান নেই। এটি কারণ হ'ল REST হ'ল একটি স্থাপত্য শৈলী, এসওএপি থেকে আলাদা নয় যা প্রোটোকল। যদিও আরইএসটি স্ট্যান্ডার্ড না হলেও ওয়েবের মতো একটি রিসফুল বাস্তবায়ন HTTP, URI, XML ইত্যাদির মতো মান ব্যবহার করতে পারে
ডেভিডআরআর

আমি 2 পদ্ধতির পছন্দ করি না। আমি বরং / এপিআই / জেনারগুলি প্রিফার করব? গানেসিড = 123 বা / এপিআই / গান / {গানের আইডি} / জেনারস
বার্ট ক্যালিক্স্টো

1
বার্ট, সতীশ সেই পথে চলকগুলিকে উল্লেখ করছিলেন, যা আপনার পছন্দ হিসাবে আপনি মূলত উল্লেখ করেছেন .. তবে, যদি জেনারগুলি আসলে মেটাডেটা হয় এবং গানের সত্তা / উত্সের ক্ষেত্র না হয় .. তবে আমি আরও সংবেদনশীলতা দেখতে পেতাম এটিতে কোনও প্রশ্নের স্ট্রিং ব্যবহার করে ..
ব্রেট ক্যাসওয়েল

@ ব্র্যাটক্যাসওয়েল এটি পেয়েছে! এটা ইশারা জন্য ধন্যবাদ. এটা সত্যিই কৃতজ্ঞ!
বার্ট ক্যালিক্সটো

16

"প্যাক" এবং আপনার তথ্যটিকে "প্রসঙ্গ" এর বিপরীতে পোষ্ট করুন যা মহাবিশ্ব-সংস্থান-লোকেটার সরবরাহ করে, যার অর্থ লোকেটারের জন্য # 1।

# 2 দিয়ে সীমাবদ্ধতার কথা মনে করুন। আমি পোষ্টগুলিকে # 1 তে পছন্দ করি।

দ্রষ্টব্য: সীমাবদ্ধতা জন্য আলোচনা করা হয়

POST এ পোষ্ট প্যারামিটার সামগ্রীর সর্বাধিক আকার রয়েছে?

জিইটি অনুরোধের দৈর্ঘ্যের সীমা আছে কি? এবং _GET এ ইউআরএল পরামিতিগুলির সর্বোচ্চ আকার

PS এই সীমাগুলি ক্লায়েন্ট ক্ষমতা (ব্রাউজার) এবং সার্ভার (কনফিগারেশন) এর উপর ভিত্তি করে।


অ্যাড-অন: বুদ্ধিমানের রুটে সংস্করণ থাকতে পারে (শিরোনামের মাধ্যমে পৃথক পৃথক) যাতে আপনি পুনরায় আকারে লেখার মতো বাক্য -পূর্ণ (এপিআই) কোড গ্রহন করে এমন কোডের পরিবর্তনের প্রয়োজন নেই এমন বিবর্তিত কার্যকারিতা সরবরাহ করে
সংস্করণযুক্ত

5

মতে কোনো URI মান পথ হায়ারারকিকাল পরামিতি জন্য এবং কোয়েরি অ হায়ারারকিকাল পরামিতি জন্য। তথ্যের। এটি আপনার পক্ষে শ্রেণিবদ্ধ যা খুব বিষয়গত হতে পারে।

এমন পরিস্থিতিতে যেখানে একাধিক ইউআরআই একই সংস্থানটিতে নির্ধারিত হয়েছে আমি সনাক্তকরণের জন্য প্রয়োজনীয় - পথ এবং পরামিতিগুলিতে - উপস্থাপনাটি তৈরি করার জন্য প্রয়োজনীয় - ক্যোয়ারিতে প্রয়োজনীয় পরামিতিগুলি রাখতে চাই। (আমার পক্ষে এইভাবে রুট করা সহজ))

উদাহরণ স্বরূপ:

  • /users/123 এবং /users/123?fields="name, age"
  • /users এবং /users?name="John"&age=30

মানচিত্র হ্রাসের জন্য আমি নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করতে চাই:

  • /users?name="John"&age=30
  • /users/name:John/age:30

সুতরাং আপনি কীভাবে আপনার ইউআরআই বানাবেন এটি সত্যিই আপনার (এবং আপনার সার্ভারের সাইড রাউটার) up

দ্রষ্টব্য: কেবলমাত্র এই পরামিতিগুলি উল্লেখ করার জন্য ক্যোয়ারী প্যারামিটারগুলি রয়েছে। সুতরাং আপনি যা করছেন তা হ'ল একটি সাধারণ কোয়েরি ভাষার সংজ্ঞা দেওয়া। জটিল প্রশ্নগুলির দ্বারা (যার মধ্যে অপারেটর রয়েছে এবং, বা এর চেয়ে বড় ইত্যাদি) আমি আপনাকে ইতিমধ্যে বিদ্যমান কোয়েরি ভাষা ব্যবহার করার পরামর্শ দিই। ইউআরআই টেম্পলেটগুলির ক্ষমতা খুব সীমিত ...


4

প্রোগ্রামার হিসাবে প্রায়শই ক্লায়েন্ট-এন্ডে, আমি ক্যোয়ারী যুক্তিটি পছন্দ করি। এছাড়াও, আমার জন্য, এটি প্যারামিটারগুলি থেকে URL টি পৃথক করে, স্বচ্ছতাতে যোগ করে এবং আরও বর্ধিত করে। এটি আমাকে ইউআরএল / ইউআরআই বিল্ডিং এবং পরামিতি নির্মাতার মধ্যে পৃথক যুক্তিযুক্ত থাকতে দেয়।

আমি অন্যরকম বিকল্প সম্পর্কে ম্যানুয়েল অলডানা যা বলেছিলাম তা পছন্দ করি যদি কোনও ধরণের গাছ জড়িত থাকে। আমি দেখতে পাচ্ছি যে ব্যবহারকারীর নির্দিষ্ট অংশগুলি সেভাবে বিচ্ছিন্ন হয়ে গেছে।


4

এখানে কোনও কঠোর এবং দ্রুত নিয়ম নেই, তবে আমি যে বিশুদ্ধ ধারণাবাদী দৃষ্টিকোণটি ব্যবহার করতে চাই তা থেকে থাম্বের নিয়মটি সংক্ষেপে এইভাবে সংক্ষেপে বলা যেতে পারে: একটি ইউআরআই পথ (সংজ্ঞায়িতভাবে) একটি উত্সকে উপস্থাপন করে এবং কোয়েরি পরামিতিগুলি সেই সংস্থানটিতে মূলত পরিবর্তনকারী হয় । এ পর্যন্ত যে সম্ভবত সাহায্য না ... বিশ্রাম এপিআই আপনি ব্যবহার করে একটি একক সম্পদ সে অনুযায়ী কাজ প্রধান পদ্ধতি আছে GET, PUTএবং DELETE। অতএব পথে কোনও বিষয় বা পরামিতি হিসাবে প্রতিনিধিত্ব করা উচিত কিনা সেই পদ্ধতিগুলি প্রশ্নের প্রতিনিধিত্বের জন্য অর্থবোধ করে কিনা তা হ্রাস করা যায়। আপনি কি PUTসেই পথে যুক্তিসঙ্গতভাবে কিছু করতে চান এবং এটি করার জন্য শব্দার্থবিজ্ঞান হবে? আপনি অবশ্যই PUTকোথাও কোথাও কিছু করতে পারেন এবং এটিকে পরিচালনা করার জন্য পিছনের দিকের অংশটি বাঁকতে পারেন তবে আপনার হওয়া উচিতPUTপ্রকৃত উত্সের উপস্থাপনের পরিমাণ কী এবং এটির অযথা প্রাসঙ্গিক সংস্করণ নয় ing সংগ্রহের জন্য একই কাজটি করা যেতে পারে POST। আপনি যদি কোনও নির্দিষ্ট সংকলনে যোগ করতে চান তবে এমন URL টি কী হবে যা বোঝায় POST

এটি এখনও কিছু ধূসর অঞ্চল ছেড়ে দেয় কারণ কিছু পথগুলি পিতামাত সম্পদের শিশুদের কী পরিমাণের দিকে ইঙ্গিত করতে পারে যা কিছুটা বিচক্ষণ এবং তাদের ব্যবহারের উপর নির্ভরশীল। এটি যে শক্ত রেখাটি আঁকবে তা হ'ল যে কোনও ধরণের ট্রানজিটিভ উপস্থাপনা কোয়েরি প্যারামিটার ব্যবহার করে করা উচিত, কারণ এতে অন্তর্নিহিত সংস্থান নেই।

মূল প্রশ্নের (টুইটারের এপিআই) দেওয়া প্রকৃত বিশ্বের উদাহরণের প্রতিক্রিয়া হিসাবে, পরামিতিগুলি একটি ট্রান্সসিটিভ ক্যোয়ারিকে উপস্থাপন করে যা সংস্থানগুলির স্থিতিতে (একটি স্তরক্রমের পরিবর্তে) ফিল্টার করে। সেই বিশেষ উদাহরণে এই সীমাবদ্ধতাগুলি দ্বারা উপস্থাপিত সংগ্রহটিতে যুক্ত করা সম্পূর্ণরূপে অযৌক্তিক হবে, এবং আরও এই ক্যোয়ারিকে এমন কোনও পথ হিসাবে উপস্থাপন করতে সক্ষম হবে না যা কোনও অবজেক্ট গ্রাফের শর্তে কোনও ধারণা তৈরি করবে।

এই ধরণের রিসোর্স ওরিয়েন্টেড দৃষ্টিকোণ গ্রহণ করা সহজেই আপনার ডোমেন মডেলের অবজেক্ট গ্রাফটিতে সরাসরি ম্যাপ করতে পারে এবং আপনার API এর যুক্তিটিকে এমন বিন্দুতে নিয়ে যেতে পারে যেখানে সবকিছু পরিষ্কার হয়ে যায় এবং একবার স্বচ্ছ-ডকুমেন্টিং পদ্ধতিতে পরিষ্কার হয়ে যায়। সাধারণত অসুস্থ-ফিটিং ডেটা মডেলকে (যেমন একটি আরডিবিএমএস) ম্যাপযুক্ত traditionalতিহ্যবাহী ইউআরএল রাউটিং ব্যবহার করে এমন সিস্টেমগুলি থেকে সরে গিয়ে ধারণাটি আরও পরিষ্কার করা যেতে পারে। অ্যাপাচি স্লেং অবশ্যই শুরু করার জন্য একটি ভাল জায়গা হবে। জোপের মতো সিস্টেমে অবজেক্ট ট্র্যাভারসাল প্রেরণের ধারণাটি আরও পরিষ্কার এনালগ সরবরাহ করে।


4

এখানে আমার মতামত।

ক্যোয়ারী প্যারামগুলি একটি অনুরোধের মেটা ডেটা হিসাবে ব্যবহৃত হয়। তারা বিদ্যমান সংস্থান কলগুলিতে ফিল্টার বা সংশোধক হিসাবে কাজ করে।

উদাহরণ:

/calendar/2014-08-08/events

সেই দিনের জন্য ক্যালেন্ডার ইভেন্ট দেওয়া উচিত।

আপনি যদি কোনও নির্দিষ্ট বিভাগের ইভেন্টগুলি চান

/calendar/2014-08-08/events?category=appointments

বা আপনার যদি 30 মিনিটের বেশি সময়ের ইভেন্টের প্রয়োজন হয়

/calendar/2014-08-08/events?duration=30

একটি লিটমাস পরীক্ষাটি জিজ্ঞাসা প্যারামগুলি ছাড়াই অনুরোধটি এখনও দেওয়া যেতে পারে কিনা তা পরীক্ষা করা হবে।


2

আমি সাধারণত # 2 এর দিকে ঝুঁকছি, কোয়েরি আর্গুমেন্ট হিসাবে (যেমন / এপিআই / রিসোর্স? প্যারামিটার = মান)।

তৃতীয় বিকল্পটি হ'ল শরীরে প্যারামিটার = মান পোস্ট করা।

এটি কারণ এটি মাল্টি প্যারামিটার সংস্থানগুলির জন্য আরও ভাল কাজ করে এবং ভবিষ্যতে ব্যবহারের জন্য আরও প্রসারণযোগ্য।

আপনি কোনটি বেছে নিন তা নিশ্চিত না করেই নিশ্চিত করুন যে আপনি কেবল একটি বেছে নিয়েছেন, মেশবেন না এবং মিলবেন না। এটি একটি বিভ্রান্তিকর API এর দিকে নিয়ে যায়।


2

এই বিষয়টির একটি "মাত্রা" রেখে গেছে তবে এটি অত্যন্ত গুরুত্বপূর্ণ: এমন সময় রয়েছে যখন "সেরা অনুশীলনগুলি" যে প্লাটফর্মটি আমরা প্রয়োগ করি বা আরআরএসটি সক্ষমতার সাথে বর্ধিত করি তার সাথে পদক্ষেপ নিতে হয়।

ব্যবহারিক উদাহরণ:

আজকাল অনেক ওয়েব অ্যাপ্লিকেশন এমভিসি (মডেল, ভিউ, কন্ট্রোলার) আর্কিটেকচার বাস্তবায়ন করে। তারা ধরে নেয় যে একটি নির্দিষ্ট স্ট্যান্ডার্ড পাথ সরবরাহ করা হয়েছে, তত বেশি যখন সেই ওয়েব অ্যাপ্লিকেশনগুলি "এসইও ইউআরএল সক্ষম করুন" বিকল্পের সাথে আসে।

কেবল একটি মোটামুটি বিখ্যাত ওয়েব অ্যাপ্লিকেশনটির উল্লেখ করতে: একটি ওপেনকার্ট ই-কমার্স শপ। অ্যাডমিন যখন "এসইও ইউআরএল" সক্ষম করে তখন বলে যে ইউআরএলগুলি বেশ মানক এমভিসি ফর্ম্যাটে আসবে যেমন:

http://www.domain.tld/special-offers/list-all?limit=25

কোথায়

  • special-offers এমভিসি নিয়ন্ত্রক যা ইউআরএল প্রক্রিয়া করবে (বিশেষ অফার পৃষ্ঠা দেখায়)

  • list-allকল করার জন্য নিয়ামকের ক্রিয়া বা ফাংশনের নাম। (*)

  • সীমা = 25 একটি বিকল্প, উল্লেখ করে যে প্রতি পৃষ্ঠায় 25 টি আইটেম প্রদর্শিত হবে।

(*) list-allহ'ল একটি স্বতন্ত্র ফাংশন নাম যা আমি স্পষ্টতার জন্য ব্যবহার করেছি। বাস্তবে, ওপেনকার্ট এবং বেশিরভাগ এমভিসি ফ্রেমওয়ার্কগুলিতে একটি ডিফল্ট, অন্তর্নিহিত (এবং সাধারণত ইউআরএলে বাদ দেওয়া হয়) indexফাংশন থাকে যা যখন ব্যবহারকারী কোনও ডিফল্ট ক্রিয়া সম্পাদন করতে চায় তখন ডাকা হয়। সুতরাং আসল বিশ্বের ইউআরএল হ'ল:

http://www.domain.tld/special-offers?limit=25

উপরের মতো এখন মোটামুটি স্ট্যান্ডার্ড অ্যাপ্লিকেশন বা কাঠামোগত কাঠামোর সাহায্যে আপনি প্রায়শই একটি ওয়েব সার্ভার পাবেন যা এটির জন্য অনুকূলিত হয়েছে, এটির জন্য ইউআরএলগুলি পুনরায় লেখায় (সত্য "নন এসইউড ইউআরএল হবে:)" http://www.domain.tld/index.php?route=special-offers/list-all&limit=25

অতএব, আপনি বিকাশকারী হিসাবে বিদ্যমান অবকাঠামো মোকাবেলা করতে এবং আপনার "সেরা অনুশীলনগুলি" মানিয়ে নেওয়ার মুখোমুখি হন, যদি না আপনি সিস্টেম অ্যাডমিন না হন তবে কীভাবে কোনও অ্যাপাচি / এনজিঞ্জ পুনর্লিখনের কনফিগারেশনটি ঠিকঠাক করতে হয় তা সঠিকভাবে জানেন (পরবর্তীটি কদর্য হতে পারে!) এবং তাই চালু.

সুতরাং, আপনার REST এপিআই প্রায়শই উল্লেখযোগ্য ওয়েব অ্যাপ্লিকেশনটির মান অনুসরণ করে এর সাথে ধারাবাহিকতা এবং স্বাচ্ছন্দ্য / গতি উভয়ই (এবং এইভাবে বাজেট সাশ্রয়) আরও ভাল হবে be

উপরের ব্যবহারিক উদাহরণে ফিরে যেতে, একটি সামঞ্জস্যপূর্ণ REST এপিআই এমন URL এর মতো কিছু হবে:

http://www.domain.tld/api/special-offers-list?from=15&limit=25

বা (এসইও নয় এমন ইউআরএল)

http://www.domain.tld/index.php?route=api/special-offers-list?from=15&limit=25

"পাথ গঠন" আর্গুমেন্ট এবং "ক্যোয়ারী গঠন" আর্গুমেন্টের মিশ্রণ সহ


1

আমি প্রচুর REST এপিআই দেখছি যা প্যারামিটারগুলি ভালভাবে পরিচালনা করে না। একটি উদাহরণ যা প্রায়শই উপস্থিত হয় তা হল যখন ইউআরআই ব্যক্তিগতভাবে সনাক্তযোগ্য তথ্য অন্তর্ভুক্ত করে।

http://software.danielwatrous.com/design-principles-for-rest-apis/

আমি মনে করি একটি তাত্পর্যপূর্ণ প্রশ্নটি যখন কোনও প্যারামিটারটি কোনও প্যারামিটার হওয়া উচিত নয় তবে পরিবর্তে অনুরোধের শিরোনাম বা শরীরে স্থানান্তরিত করা উচিত ।


0

এটি একটি খুব আকর্ষণীয় প্রশ্ন।

আপনি উভয়টি ব্যবহার করতে পারেন, এই বিষয় সম্পর্কে কোনও কঠোর নিয়ম নেই, তবে ইউআরআই পাথ ভেরিয়েবলগুলি ব্যবহারের কিছু সুবিধা রয়েছে:

  • ক্যাশে : ইন্টারনেটে বেশিরভাগ ওয়েব ক্যাশে পরিষেবা যখন কোয়েরি পরামিতি থাকে তখন অনুরোধটিকে ক্যাচ করে না। তারা এটি করে কারণ সার্ভারে ডেটা পরিবর্তন করার জন্য জিইটি অনুরোধ ব্যবহার করে প্রচুর আরপিসি সিস্টেম রয়েছে (ব্যর্থ !! অবশ্যই একটি নিরাপদ পদ্ধতি হতে হবে)

তবে আপনি যদি পাথ ভেরিয়েবলগুলি ব্যবহার করেন তবে এই সমস্ত পরিষেবা আপনার জিইটি অনুরোধগুলিকে ক্যাশে করতে পারে।

  • হায়ারার্কি : পাথ ভেরিয়েবলগুলি শ্রেণিবিন্যাস: / শহর / রাস্তার / স্থানটি উপস্থাপন করতে পারে

এটি ব্যবহারকারীকে ডেটা গঠনের বিষয়ে আরও তথ্য দেয় information

তবে যদি আপনার ডেটার কোনও শ্রেণিবিন্যাস সম্পর্কিত সম্পর্ক না থাকে তবে আপনি কমা বা আধা-কোলন ব্যবহার করে পাথ ভেরিয়েবলগুলি ব্যবহার করতে পারেন:

/ শহর / দ্রাঘিমাংশ, অক্ষাংশ

একটি নিয়ম হিসাবে, পরামিতিগুলির ক্রমের ক্ষেত্রে কমা ব্যবহার করুন, অর্ডার দেওয়ার পরে কোনও অর্ডার-কোলন ব্যবহার করুন:

/ IconGenerator / লাল; নীল; সবুজ

এই কারণগুলি ছাড়াও, কিছু ক্ষেত্রে রয়েছে যখন ক্যোয়ারিং স্ট্রিং ভেরিয়েবলগুলি ব্যবহার করা খুব সাধারণ:

  • আপনার যখন ব্রাউজারের প্রয়োজন হয় তখন স্বয়ংক্রিয়ভাবে ইউআরআইতে এইচটিএমএল ফর্ম ভেরিয়েবলগুলি রাখুন
  • আপনি যখন অ্যালগরিদম নিয়ে কাজ করছেন। উদাহরণস্বরূপ, গুগল ইঞ্জিন কোয়েরি স্ট্রিংগুলি ব্যবহার করে:

http: // www.google.com/search?q=rest

সংক্ষেপে, এই পদ্ধতির একটি ব্যবহার করার কোনও শক্ত কারণ নেই তবে যখনই আপনি পারবেন ইউআরআই ভেরিয়েবলগুলি ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.