REST এপিআই সেরা অনুশীলন: ইনপুট [বন্ধ] হিসাবে প্যারামিটার মানগুলির তালিকা কীভাবে গ্রহণ করবেন?


409

আমরা একটি নতুন আরএসটি এপিআই চালু করছি এবং আমাদের ইনপুট পরামিতিগুলি কীভাবে ফর্ম্যাট করা উচিত তা সম্পর্কে সর্বোত্তম অনুশীলনের জন্য কিছু সম্প্রদায় ইনপুট চেয়েছিলাম:

এখনই, আমাদের এপিআই খুব JSON কেন্দ্রিক (কেবলমাত্র JSON প্রদান করে)। আমরা এক্সএমএল ফিরিয়ে দিতে চাই / চাই তা নিয়ে একটি পৃথক বিষয় The

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

উদাহরণস্বরূপ, কয়েকটি পণ্য বিবরণ পেতে যেখানে আমাদের কাছে বর্তমানে একযোগে একাধিক পণ্য টানা যেতে পারে:

http://our.api.com/Product?id=["101404","7267261"]

আমাদের কি এটিকে সরল করে দেওয়া উচিত:

http://our.api.com/Product?id=101404,7267261

বা জেএসওএন ইনপুট ব্যবহার করা সহজ? আরও বেদনা?

আমরা উভয় শৈলী গ্রহণ করতে চাইব তবে সেই নমনীয়তাটি কি আসলে আরও বিভ্রান্তি এবং মাথা ব্যথার কারণ হতে পারে (রক্ষণাবেক্ষণযোগ্যতা, ডকুমেন্টেশন ইত্যাদি)?

আরও জটিল কেসটি হ'ল যখন আমরা আরও জটিল ইনপুট সরবরাহ করতে চাই। উদাহরণস্বরূপ, আমরা যদি অনুসন্ধানে একাধিক ফিল্টারকে অনুমতি দিতে চাই:

http://our.api.com/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}

আমরা অগত্যা ফিল্টার ধরণের (যেমন পণ্য টাইপ এবং রঙ) এর অনুরোধের নাম হিসাবে লাগাতে চাই না:

http://our.api.com/Search?term=pumas&productType=["Clothing","Bags"]&color=["Black","Red"]

কারণ আমরা সমস্ত ফিল্টার ইনপুট একসাথে গ্রুপ করতে চেয়েছিলাম।

শেষ পর্যন্ত, এটি কি সত্যিই গুরুত্বপূর্ণ? সম্ভবত সেখানে প্রচুর জেএসওএন ব্যবহার রয়েছে যে ইনপুট টাইপটিতে তেমন কিছু যায় আসে না।

আমি জানি যে আমাদের জাভাস্ক্রিপ্ট ক্লায়েন্টরা এপিএজে AJAX কল করছে তাদের জীবন সহজ করার জন্য JSON ইনপুটগুলির প্রশংসা করতে পারে।

উত্তর:


341

একটি পদক্ষেপ ফিরে

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

তাই আরইএসটি-র চোখের ?id=["101404","7267261"]চেয়ে আরও বিশ্রামযোগ্য ?id=101404,7267261বা \Product\101404,7267261কিছুটা নিরর্থক কিনা তা নিয়ে তর্ক করা ।

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

পরামর্শ

  1. একই সংস্থান এবং একাধিক ইউআরআই Content-Location

    আমরা উভয় শৈলী গ্রহণ করতে চাইব তবে সেই নমনীয়তাটি কি আসলে আরও বিভ্রান্তি এবং মাথা ব্যথার কারণ হতে পারে (রক্ষণাবেক্ষণযোগ্যতা, ডকুমেন্টেশন ইত্যাদি)?

    ইউআরআইগুলি সংস্থানগুলি সনাক্ত করে। প্রতিটি সংস্থান থাকা উচিত এক ক্যানোনিকাল কোনো URI। এর অর্থ এই নয় যে আপনার কাছে দুটি ইউআরআই একই সংস্থানটিতে নির্দেশ করতে পারে না তবে এটি করার বিষয়ে ভালভাবে নির্ধারিত উপায় রয়েছে। আপনি যদি JSON এবং তালিকা ভিত্তিক ফর্ম্যাটগুলি (বা অন্য কোনও ফর্ম্যাট) উভয়ই ব্যবহার করার সিদ্ধান্ত নেন তবে এই ফর্ম্যাটগুলির মধ্যে কোনটি মূল নীতিগত ইউআরআই তা আপনাকে সিদ্ধান্ত নিতে হবে । একই "উত্স" এ নির্দেশিত অন্যান্য ইউআরআইয়ের সমস্ত প্রতিক্রিয়ায় Content-Locationশিরোনাম অন্তর্ভুক্ত করা উচিত ।

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

  2. আপনার ইউআরআইতে "অনুসন্ধান" করুন

    আরও জটিল কেসটি হ'ল যখন আমরা আরও জটিল ইনপুট সরবরাহ করতে চাই। উদাহরণস্বরূপ, আমরা যদি অনুসন্ধানে একাধিক ফিল্টারকে অনুমতি দিতে চাই ...

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

    নামটি উপমাটি মরে যাওয়ার জন্য, ইউআরআইতে একটি ক্রিয়া ব্যবহার করা যখন আপনি কারও সাথে যোগাযোগ করতে চান তখন কারও নাম পরিবর্তন করার মতো। আমি যদি ববয়ের সাথে আলাপচারিতা করি তবে আমি যখন তাকে হাই বলতে চাই তখন বব এর নাম "ববহি" হয়ে ওঠে না। একইভাবে, আমরা যখন পণ্যগুলি "অনুসন্ধান" করতে চাই, আমাদের ইউআরআই কাঠামোটি "/ পণ্য / ..." থেকে "/ অনুসন্ধান / ..." তে পরিবর্তন করা উচিত নয়।

আপনার প্রাথমিক প্রশ্নের উত্তর দেওয়া

  1. সংক্রান্ত ["101404","7267261"]বনাম 101404,7267261: আমার পরামর্শ এখানে সরলতা দোহাই জন্য তাদেরকে JSON সিনট্যাক্স (অর্থাত প্রয়োজন হয় না আপনার ব্যবহারকারীদের URL টি এনকোডিং না আপনি কি সত্যিই হবে না যখন) এড়িয়ে চলা। এটি আপনার এপিআইকে আরও বেশি ব্যবহারযোগ্য করে তুলবে। আরও ভাল, অন্যরা যেমন সুপারিশ করেছে, এটি স্ট্যান্ডার্ড application/x-www-form-urlencodedফর্ম্যাটের সাথে যান কারণ এটি সম্ভবত আপনার শেষ ব্যবহারকারীদের কাছে সবচেয়ে বেশি পরিচিত (উদাঃ ?id[]=101404&id[]=7267261)। এটি "সুন্দরী" নাও হতে পারে তবে প্রীতি ইউআরআই ব্যবহারের যোগ্য ইউআরআই প্রয়োজন হয় না। যাইহোক, আমার প্রাথমিক বিষয়টির পুনরাবৃত্তি করার জন্য, শেষ পর্যন্ত আরএসটি-র কথা বলার পরেও কিছু যায় আসে না। এটিতে খুব বেশি পরিমাণে বাস করবেন না।

  2. আপনার জটিল অনুসন্ধান ইউআরআই উদাহরণটি আপনার পণ্যের উদাহরণের মতো একইভাবে সমাধান করা যেতে পারে। আমি application/x-www-form-urlencodedআবার ফর্ম্যাটটিতে যাওয়ার পরামর্শ দেব কারণ এটি ইতিমধ্যে এমন একটি মান যা অনেকের সাথে পরিচিত। এছাড়াও, আমি উভয় একত্রিত করার প্রস্তাব দিই।

আপনার ইউআরআই ...

/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}    

আপনার ইউআরআই ইউআরআই এনকোড হওয়ার পরে ...

/Search?term=pumas&filters=%7B%22productType%22%3A%5B%22Clothing%22%2C%22Bags%22%5D%2C%22color%22%3A%5B%22Black%22%2C%22Red%22%5D%7D

এ রূপান্তর করা যায় ...

/Product?term=pumas&productType[]=Clothing&productType[]=Bags&color[]=Black&color[]=Red

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


67
অনুসরণ করতে চেয়েছিলেন এবং নোট করুন যে []বাক্য গঠন সর্বদা সমর্থিত হয় না (এবং এটি সাধারণ হওয়া সত্ত্বেও ইউআরআই স্পেসটি লঙ্ঘন করতে পারে)। কিছু HTTP সার্ভার এবং প্রোগ্রামিং ভাষা কেবল নামের পুনরাবৃত্তি করতে পছন্দ করবে (উদাঃ productType=value1&productType=value2)।
নাটোগুড

1
এই প্রশ্নের সাথে প্রাথমিক প্রশ্ন .. "/ অনুসন্ধান? শব্দটি = পুমাস এবং ফিল্টার = product" পণ্য টাইপ ": [" পোশাক "," ব্যাগ "]," রঙ ": [" কালো "," লাল "] to" অনুবাদ করে .. । (productType == পোশাক || productType == ব্যাগ) && (রঙ == কালো || রঙ == লাল) তবে আপনার সমাধান: / পণ্য? শব্দ = পুমাস এবং পণ্য টাইপ [] = পোশাক এবং পণ্য টাইপ [] = ব্যাগ এবং রঙ [] = কালো ও রঙ [] = লাল এটিতে অনুবাদ হয় বলে মনে হচ্ছে ... হয় (প্রোডাক্টটাইপ == পোশাক || পণ্য টাইপ == ব্যাগ || রঙ == কালো || রঙ == লাল) বা হয় (প্রোডাক্ট টাইপ == পোশাক এবং& প্রোডাক্ট টাইপ == ব্যাগ && রঙ == কালো && রঙ == লাল) যা আমার কাছে কিছুটা আলাদা বলে মনে হচ্ছে। নাকি আমি ভুল বুঝেছি?
থমাস চেং

2
পোস্ট অনুরোধ ইনপুট সম্পর্কে কি? আমি জানতে চেয়েছিলাম যে আমরা কোনও সংস্থান আপডেট করছি কিনা, তবে কোয়েরি / ফিল্টার এবং ডেটা মানক বিন্যাসে দেহে পাঠানো কি খারাপ অভ্যাস? যেমন। যদি আমি ব্যবহারকারী API ব্যবহার করে এর সাথে সম্পর্কিত ডেটা পরিবর্তন করতে চান /user/এবং শরীরের, আমার পাঠাব { q:{}, d: {} }সঙ্গে qব্যবহারকারী ডিবি মধ্যে জানতে চাওয়া হবে সঙ্গে এবং ক্যোয়ারী হিসাবে dরুপান্তরিত তথ্য হিসাবে।
অণু

1
তালিকাটি খুব বড় হলে আপনি কী করবেন? ব্রাউজারের উপর নির্ভর করে ইউআরআই দৈর্ঘ্যে সীমিত। আমি সাধারণত একটি পোস্ট অনুরোধে স্যুইচ করেছি এবং বডিটিতে তালিকাটি প্রেরণ করেছি। সেখানে কোন পরামর্শ?
ট্রয় কোসেন্টিনো

4
এটি খুব বড় হতে হবে ( স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / ৪১17১৪২/২ দেখুন ), তবে হ্যাঁ, অত্যন্ত চরম ক্ষেত্রে আপনাকে অনুরোধের মূল অংশ ব্যবহার করতে হবে use তথ্য পুনরুদ্ধারের জন্য ক্যোয়ারী পোস্ট করা সেই বিষয়গুলির মধ্যে একটি যা রিস্টাফেরিয়ানরা বিতর্ক করতে পছন্দ করে।
এনটোগড

233

ইউআরএল প্যারামিটার হিসাবে মানগুলির তালিকা পাস করার স্ট্যান্ডার্ড উপায় হ'ল তাদের পুনরাবৃত্তি:

http://our.api.com/Product?id=101404&id=7267261

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

সীমিত মানগুলিও ঠিক আছে।

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

কিছুকে যেভাবে আমি একটি জটিল প্রশ্নটি বিশ্রামের সাথে দেখেছি তা দুটি ধাপে:

  1. POST আপনার জিজ্ঞাসা প্রয়োজনীয়তা, একটি আইডি ফিরে পেয়ে (মূলত একটি অনুসন্ধানের মানদণ্ডের উত্স তৈরি করা)
  2. GET অনুসন্ধান, উপরের আইডি রেফারেন্সিং
  3. প্রয়োজনে allyচ্ছিকভাবে ক্যোয়ারী প্রয়োজনীয়তা মুছে ফেলুন তবে নোট করুন যে সেগুলি প্রয়োজনীয়তা পুনরায় ব্যবহারের জন্য উপলব্ধ।

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

1
যদি প্রশ্নগুলি সাধারণ পরামিতি হিসাবে কাজ করতে পারে তবে এটি করুন। উত্সটি বাকী-আলোচনা মেলিংয়ের
ক্যাথি ভ্যান স্টোন

2
আপনি যদি কেবল দুটি সংস্থান দেখাতে চান তবে জেমস ওয়েস্টগেটের উত্তরটি আরও সাধারণ
ক্যাথি ভ্যান স্টোন

এটা সঠিক উত্তর. অদূর ভবিষ্যতে আমি নিশ্চিত যে আমরা ওডিটা সমর্থিত কিছু ফিল্টার = আইডি (ক, খ, সি, ...) দেখতে পাব that
বার্ট ক্যালিক্স্টো

এভাবেই আক্কা এইচটিটিপি কাজ করে
জোয়ান

20

প্রথম:

আমি মনে করি আপনি এটি 2 উপায়ে করতে পারেন

http://our.api.com/Product/<id> : আপনি যদি কেবল একটি রেকর্ড চান

http://our.api.com/Product : আপনি যদি সমস্ত রেকর্ড চান

http://our.api.com/Product/<id1>,<id2> : যেমন জেমস প্রস্তাবিত একটি বিকল্প হতে পারে যেহেতু প্রোডাক্ট ট্যাগের পরে প্যারামিটার আসে

বা আমি যেটি সবচেয়ে বেশি পছন্দ করি তা হ'ল:

আপনি হাইপ্রেমিডিয়াটিকে একটি রেস্টফুল ডাব্লুএসের সম্পত্তি অ্যাপ্লিকেশন স্টেট (HATEOAS) এর ইঞ্জিন হিসাবে ব্যবহার করতে পারেন এবং এমন একটি কল http://our.api.com/Productকরতে পারেন যা এর সমতুল ইউআরএলগুলি ফিরিয়ে দেয় http://our.api.com/Product/<id>এবং এর পরে তাদের কল করতে পারে।

দ্বিতীয়

আপনাকে যখন ইউআরএল কলগুলিতে প্রশ্নগুলি করতে হবে। আমি আবার HATEOAS ব্যবহার করার পরামর্শ দেব।

1) একটি কল কল করুন http://our.api.com/term/pumas/productType/clothing/color/black

2) একটি কল কল করুন http://our.api.com/term/pumas/productType/clothing,bags/color/black,red

3) (হেটোএএস ব্যবহার করে) ` http://our.api.com/term/pumas/productType/ -> এ সমস্ত কল সম্ভাব্য url পেতে ইউআরএলগুলি কল করুন -> আপনি যা চান তা কল করুন (পোশাক এবং ব্যাগ) - > সম্ভাব্য রঙের ইউআরএলগুলি গ্রহণ করুন -> আপনার পছন্দেরগুলিতে কল করুন


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

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

আমি রেলগুলিতে একটি বিশ্রামিত এপিআই ওয়েবসার্ভিস তৈরি করছি এবং আমার উপরের মতো একই ইউআরএল কাঠামোটি অনুসরণ করতে হবে ( আমাদের.পিআই . com / এমএম / পাইমাস / প্রোডাক্ট টাইপ / ক্লাথিং / রঙ / ব্ল্যাক )। তবে সে অনুযায়ী রুটগুলি কীভাবে কনফিগার করবেন তা আমি নিশ্চিত নই।
রুবিবাদক

পদ, প্রোডাক্টটাইপ এবং আপনার নিয়ামকদের রঙ কী? যদি তা হয় তবে আপনাকে কেবল এটি করতে হবে: সংস্থানগুলি: শব্দগুলি সংস্থানগুলি করে: পণ্য টাইপ সংস্থান করে: রঙের সমাপ্তি
ডিয়েগো ডায়াস ডায়াস

প্রোডাক্টটাইপ এবং রঙ প্যারাম হয়। সুতরাং
প্রোডাক্ট টাইপের প্যারামগুলি

12

আপনি আরএফসি 6570 পরীক্ষা করে দেখতে চাইতে পারেন । এই ইউআরআই টেমপ্লেট স্পেসটি ইউআরএলগুলিতে পরামিতিগুলি কীভাবে থাকতে পারে তার অনেক উদাহরণ দেখায়।


1
বিভাগ 3.2.8 প্রযোজ্য তা বলে মনে হচ্ছে। যদিও এটি লক্ষণীয় যে এটি কেবলমাত্র একটি প্রস্তাবিত মান এবং এটি এই পয়েন্টটি অতিক্রম করেছে বলে মনে হয় না।
মাইক পোস্ট

3
@ মাইকপোস্ট এখন যেহেতু আইইটিএফ "স্ট্যান্ডার্ড ট্র্যাক" নথিগুলির জন্য একটি দুই ধাপের পরিপক্কতা প্রক্রিয়ায় চলে গেছে, আমি আশা করি "ইন্টারনেট স্ট্যান্ডার্ড" এ যাওয়ার আগে 6570 আরও কয়েক বছর এভাবেই থাকবে to সরঞ্জাম.ietf.org/html/rfc6410 অনুমানটি অত্যন্ত স্থিতিশীল, এর অনেকগুলি বাস্তবায়ন রয়েছে এবং এটি ব্যাপকভাবে ব্যবহৃত হয়।
ড্যারেল মিলার

আহ আমি এই পরিবর্তন সম্পর্কে সচেতন ছিলাম না। (বা, টিআইএল আইইটিএফ এখন আরও যুক্তিসঙ্গত)) ধন্যবাদ!
মাইক পোস্ট

8

প্রথম কেস:

একটি সাধারণ পণ্য অনুসন্ধান এটির মতো দেখাবে

http://our.api.com/product/1

সুতরাং আমি ভাবছিলাম যে সেরা অনুশীলনটি এটি করার জন্য আপনার পক্ষে হবে

http://our.api.com/Product/101404,7267261

দ্বিতীয় কেস

ক্যোরিস্ট্রিং প্যারামিটারগুলির সাথে অনুসন্ধান করুন - এর মতো সূক্ষ্ম। আমি ব্যবহারের পরিবর্তে AND এবং OR এর সাথে শর্তগুলি একত্রিত করার জন্য প্রলুব্ধ হব []

পিএস এটি বিষয়গত হতে পারে, তাই আপনি যা স্বাচ্ছন্দ্য বোধ করেন তা করুন।

ইউআরএল-তে ডেটা রাখার কারণ তাই লিঙ্কটি কোনও সাইটে / ব্যবহারকারীদের মধ্যে ভাগ করে নেওয়া যায় pas যদি এটি কোনও সমস্যা না হয় তবে তার পরিবর্তে কোনওভাবে JSON / POST ব্যবহার করুন।

সম্পাদনা: প্রতিবিম্বের উপর আমি মনে করি এই পদ্ধতির সাথে যৌগিক কী সহ কোনও সত্তার পক্ষে স্যুট, তবে একাধিক সত্তার জন্য কোনও অনুসন্ধান নয়।


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

2
আমি সর্বদা যদিও এইচটিটিপি ক্রিয়াকলাপ, একটি রেস্ট ব্যবহারের ক্ষেত্রে নির্দিষ্ট ক্রিয়াকলাপ করা হত এবং এটি ছিল গাইডেন্স লাইন: পান: পুনরুদ্ধার করুন / পড়ুন অবজেক্ট, পোস্ট তৈরি করুন, বিদ্যমান অবজেক্টটি পুট করুন এবং কোনও বস্তু মুছুন। সুতরাং আমি কিছু পুনরুদ্ধার করতে একটি পোষ্ট ব্যবহার করব না। যদি আমি বিশেষভাবে (ফিল্টার) কোনও বস্তুর তালিকা চাই, আমি url পরামিতিগুলির একটি তালিকা সহ একটি জিইটি করতাম (কমা দ্বারা পৃথক করা ভাল বলে মনে হয়)
অ্যালেক্স

1

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

http://our.api.com/Product/101404,7267261

এটি করে আপনি:

আপনার প্রতিক্রিয়াটিকে অ্যারে হিসাবে ব্যাখ্যা করতে বাধ্য করে ক্লায়েন্টদের জটিল করুন , যা আমি নিম্নলিখিত অনুরোধটি জানালে আমার কাছে স্বজ্ঞাগত হয়:http://our.api.com/Product/101404

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

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

উদাহরণ

আমি অ্যামেজিংয়ের একটি বই অর্ডার করতে চাই । এটি ঠিক কোন বইটি আমি জানি এবং হরর বইয়ের জন্য নেভিগেট করার সময় আমি তালিকাটিতে এটি দেখতে পাই:

  1. 10 000 আশ্চর্যজনক লাইন, 0 আশ্চর্যজনক পরীক্ষা
  2. আশ্চর্য দানব ফিরে
  3. আসুন আশ্চর্যজনক কোড সদৃশ
  4. শেষের আশ্চর্যজনক শুরু beginning

দ্বিতীয় বইটি বাছাই করার পরে, আমাকে তালিকার বইয়ের অংশ বিশদ সম্পর্কিত একটি পৃষ্ঠায় পুনঃনির্দেশিত করা হয়েছে:

--------------------------------------------
Book #1
--------------------------------------------
    Title: The return of the amazing monster
    Summary:
    Pages:
    Publisher:
--------------------------------------------

বা কোনও পৃষ্ঠায় আমাকে কেবল সেই বইয়ের সম্পূর্ণ বিবরণ দিচ্ছেন?

---------------------------------
The return of the amazing monster
---------------------------------
Summary:
Pages:
Publisher:
---------------------------------

আমার মতামত

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

/products/{id}
/products/{id}/specs/{name}

যে মুহুর্তে আপনার 1 টিরও বেশি সংস্থান প্রয়োজন, আমি আরও বড় সংগ্রহ থেকে ফিল্টারিংয়ের পরামর্শ দেব। একই উদাহরণের জন্য:

/products?ids=

এটি আরোপিত না হওয়ায় অবশ্যই এটি আমার মতামত।

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