একটি REST এপিআই ক্লায়েন্ট হিসাবে একটি ওয়েব অ্যাপ্লিকেশন: কীভাবে সংস্থান সনাক্তকারীদের পরিচালনা করতে হয়


21

আমি যখন এটি প্রয়োগ করার চেষ্টা করি তখন আমার মাথায় REST সংক্রান্ত বিরোধিতা সম্পর্কিত বেশ কয়েকটি ধারণা।

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

উদাহরণ বিবেচনা করুন। আরআরএসটি এপিআইয়ের এমন একটি সংস্থান রয়েছে যা কোনও ব্যক্তিকে ফিরে দেয়:

<Person>
  <Links>
    <Link rel="self" href="http://my.rest.api/api/person/1234"/>
  </Links>
  <Pets>
    <Link rel="pet" href="http://my.rest.api/api/pet/678"/>
  </Pets>
</Person>

ওয়েব অ্যাপ্লিকেশন নিয়ে সমস্যা দেখা দেয়। আসুন ধরে নেওয়া যাক এটি এমন কোনও পৃষ্ঠা ফেরত দেয় যা ব্রাউজারগুলিতে একটি হাইপারলিঙ্ক রয়েছে:

<body class="person">
  <p>
    <a href="http://my.web.app/pet/???????" />
  </p>
</body>

hrefগুণাবলীতে আমার কী রাখা উচিত ? যখন কোনও ব্যবহারকারী টার্গেট পৃষ্ঠা খুললে আমি কীভাবে ওয়েব অ্যাপ্লিকেশনটিতে API সত্ত্বার URL রাখব?

প্রয়োজনীয়তাগুলি বিরোধী বলে মনে হচ্ছে:

  1. হাইপারলিঙ্কটি hrefওয়েব অ্যাপ্লিকেশনটির দিকে পরিচালিত করা উচিত কারণ এটি ইউআই হোস্টিং সিস্টেম
  2. hrefসত্তা কিছু আইডি থাকা উচিত কারণ ওয়েব অ্যাপ্লিকেশন সত্তা মোকাবেলার যখন লক্ষ্য পৃষ্ঠা প্রর্দশিত সক্ষম হওয়া আবশ্যক
  3. ওয়েব অ্যাপ্লিকেশনটি আরএসটি ইউআরএলগুলি বিশ্লেষণ / নির্মাণ করা উচিত নয়, কারণ এটি বিশ্রাম-সম্পূর্ণ নয়, উল্লিখিত বইটি বলে

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

সুতরাং, আমি শুধু নিতে না পারেন, 1234কারণ একটি RESTful ক্লায়েন্ট আমি এটা সঙ্গে আচরণ করা উচিত যেমন যদি এটা ভালো কিছু ছিল এপিআই প্রতিক্রিয়া URL থেকে http://my.rest.api/api/AGRIDd~ryPQZ^$RjEL0j। অন্যদিকে, আমাকে অবশ্যই এমন কিছু ইউআরএল দিতে হবে যা আমার ওয়েব অ্যাপ্লিকেশনটির দিকে নিয়ে যায় এবং অ্যাপ্লিকেশনটির পক্ষে কোনওরকমভাবে এপিআই এর মূল URL টি পুনরুদ্ধার করতে এবং এপিআইএল সংস্থানগুলি অ্যাক্সেস করতে সেই URL টি ব্যবহার করা যথেষ্ট।

সহজতম উপায়টি সম্ভবত সংস্থানগুলির API URLগুলি তাদের স্ট্রিং সনাক্তকারী হিসাবে ব্যবহার করছে using তবে ওয়েব পৃষ্ঠার ইউআরএলগুলি http://my.web.app/person/http%3A%2F%2Fmy.rest.api%2Fapi%2Fperson%2F1234কুরুচিপূর্ণ।

এটি একটি ডেস্কটপ অ্যাপ্লিকেশন বা একক পৃষ্ঠার জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনটির পক্ষে বেশ সহজ বলে মনে হচ্ছে। যেহেতু তারা অবিচ্ছিন্নভাবে বাস করে, তাই অ্যাপ্লিকেশনটির জন্য তারা কেবল URL টি মেমরির মধ্যে পরিষেবা সামগ্রীর সাথে রাখতে পারে এবং প্রয়োজনে সেগুলি ব্যবহার করতে পারে।

একটি ওয়েব অ্যাপ্লিকেশন দিয়ে আমি বেশ কয়েকটি পদ্ধতির কল্পনা করতে পারি তবে সমস্তটি অদ্ভুত বলে মনে হচ্ছে:

  1. এপিআই ইউআরএলে হোস্টটি প্রতিস্থাপন করুন এবং কেবল ফলাফল রাখুন। বিশাল অবক্ষয়টি হ'ল এটির জন্য অ্যাপ্লিকেশনটি যে API টি উত্পন্ন করে তার অর্থ ওয়েব অ্যাপ্লিকেশনটির প্রয়োজন যা রাক্ষসী সংযোজন। তদুপরি, এটি আর বিশ্রামের নয়, কারণ আমার ওয়েব অ্যাপ্লিকেশন ইউআরএলগুলি ব্যাখ্যা করতে শুরু করে।
  2. লিঙ্কগুলির সাথে একসাথে REST এপিআইয়ের কাঁচা আইডিকে প্রকাশ করুন, ওয়েব অ্যাপ্লিকেশনটির ইউআরএলগুলি তৈরি করতে তাদের ব্যবহার করুন এবং তারপরে এপিআই-তে প্রয়োজনীয় সংস্থানগুলি সন্ধান করতে ওয়েব অ্যাপ্লিকেশন সার্ভারে আইডিগুলি ব্যবহার করুন। এটি আরও ভাল, তবে ওয়েব অ্যাপ্লিকেশন সার্ভারের পারফরম্যান্সকে প্রভাবিত করবে কারণ ব্রাউজারের কোনও অনুরোধ পরিচালনা করতে ওয়েব অ্যাপ্লিকেশনটিকে কোনও ফর্মের গেট-বাই-আইডি অনুরোধের একটি চেইন জারি করে REST পরিষেবা নেভিগেশনের মধ্য দিয়ে যেতে হবে। কিছুটা নেস্টেড রিসোর্সের জন্য এটি ব্যয়বহুল হতে পারে।
  3. selfওয়েব অ্যাপ সার্ভারে অবিচ্ছিন্ন (ডিবি?) ম্যাপিংয়ের মাধ্যমে এপিআই দ্বারা ফিরিয়ে নেওয়া সমস্ত ইউআরএল সংরক্ষণ করুন। তাদের জন্য কিছু আইডি তৈরি করুন, ওয়েব অ্যাপ্লিকেশন পৃষ্ঠা URL গুলি তৈরি করতে এবং REST পরিষেবা সংস্থার URL গুলি পেতে আইডিগুলি ব্যবহার করুন। অর্থাত আমি রক্ষা http://my.rest.api/pet/678একটি নতুন কী বলো, সহ URL কোথাও 3, এবং ওয়েব পেজের URL জেনারেট http://my.web.app/pet/3। এটি কোনও ধরণের HTTP ক্যাশে প্রয়োগের মতো দেখায়। আমি জানি না কেন, তবে এটি আমার কাছে অদ্ভুত বলে মনে হচ্ছে।

বা এর কি সমস্ত অর্থ হ'ল RESTful API গুলি ওয়েব অ্যাপ্লিকেশনগুলির ব্যাকেন্ড হিসাবে কাজ করতে পারে না?


1
আপনি কী অর্জন করতে চাইছেন তা স্পষ্ট নয়, সম্ভবত আপনার সাধারণ অভিপ্রায়টি যে একে অপরের উপরে রাখছেন সেই আর্কিটেকচারের স্তরগুলির নীচে isাকা রয়েছে, সুতরাং "RESTful APIs" আপনাকে সত্যিই সহায়তা করবে কিনা তা বলা শক্ত। আপনার সমস্যাটি সম্পর্কে আমি যা বুঝি সেগুলি থেকে বিকল্প 2 একটি সহজ এবং কার্যক্ষম সমাধান। এখানে "সমস্যা" "RESTful APIs" এর অন্তর্নিহিত। RestIsJustSqlReinvented এবং আপনি যখন কোনও আরডিবিএমএস থেকে পর্যাপ্ত জটিল সাবগ্রাফটি পুনরুদ্ধার করার চেষ্টা করবেন আপনি তখন একই সমস্যাটিতে পড়বেন । আপনার প্রশ্নের জন্য অনুকূলিত একটি ক্যাশে বা উপস্থাপনা ব্যবহার করুন।
back2dos

উত্তর:


5

প্রশ্নের আপডেটগুলি সম্বোধন করার জন্য সম্পাদিত, পূর্ববর্তী উত্তরগুলি সরানো হয়েছে

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

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

<Entity type="Pet">
    <Link rel="self" href="http://example.com/pets/1" />
    <Link rel="owner" href="http://example.com/people/1" />
    <UniqueName>Spot</UniqueName>
</Entity>

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

http://example.com/GUI/pets/Spot

যদি পোষা প্রাণীটি মালিক ছাড়া কোনও ধারণা তৈরি না করে (বা তার মালিক ছাড়া সিস্টেমে পোষা প্রাণীকে অনুমতি দেওয়া হয় না) তবে আমরা সিস্টেমটিতে পোষা প্রাণীটির "পরিচয়ের" অংশ হিসাবে মালিককে ব্যবহার করতে পারি:

http://example.com/GUI/owners/ জন/ pets/1 (জন জন্য তালিকায় প্রথম পোষা প্রাণী)

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

<Entity type="ResourceList">
    <Link rel="people" href="http://example.com/api/people" />
    <Link rel="pets" href="http://example.com/api/pets" />
</Entity>

সুতরাং কেবলমাত্র API এ প্রথম প্রবেশের বিষয়টি জানতে এবং সিস্টেম শনাক্তকারীদের খুঁজে বের করার জন্য কোনও URL টি প্রক্রিয়াকরণ না করে আমরা এরকম কিছু করতে পারি:

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

<Entity type="Person">
    <Link rel="self" href="http://example.com/api/people/1" />
    <Pets>
        <Link rel="pet" href="http://example.com/api/pets/1" />
        <Link rel="pet" href="http://example.com/api/pets/2" />
    </Pets>
    <UniqueName>John</UniqueName>
</Entity>
<Entity type="Person">
    <Link rel="self" href="http://example.com/api/people/2" />
    <Pets>
        <Link rel="pet" href="http://example.com/api/pets/3" />
    </Pets>
    <UniqueName>Jane</UniqueName>
</Entity>

জিইউআই প্রতিটি সংস্থার মধ্য দিয়ে লুপ করবে এবং ইউনিক নামটি "আইডি" হিসাবে ব্যবহার করে প্রতিটি ব্যক্তির জন্য একটি তালিকা আইটেম মুদ্রণ করবে:

<a href="http://example.com/gui/people/1">John</a>
<a href="http://example.com/gui/people/2">Jane</a>

এটি করার সময় এটি প্রতিটি লিঙ্কটি প্রক্রিয়া করতে পারে যা এটি "পোষা প্রাণীর" একটি স্বস্তি দিয়ে খুঁজে পায় এবং পোষা প্রাণীর উত্স যেমন:

<Entity type="Pet">
    <Link rel="self" href="http://example.com/api/pets/1" />
    <Link rel="owner" href="http://example.com/api/people/1" />
    <UniqueName>Spot</UniqueName>
</Entity>

এটি ব্যবহার করে এটি লিঙ্কটি যেমন মুদ্রণ করতে পারে:

<!-- Assumes that a pet can exist without an owner -->
<a href="http://example.com/gui/pets/Spot">Spot</a>

অথবা

<!-- Assumes that a pet MUST have an owner -->
<a href="http://example.com/gui/people/John/pets/Spot">Spot</a>

যদি আমরা প্রথম লিঙ্কটি নিয়ে যাই এবং ধরে নিই যে আমাদের প্রবেশের সংস্থার "পোষা প্রাণী" এর সাথে একটি লিঙ্ক রয়েছে তবে নিয়ন্ত্রণ প্রবাহ জিইআইতে এই জাতীয় কিছু হবে:

  1. পৃষ্ঠাটি খোলা হয়েছে এবং পোষা প্রাণীদের স্পট অনুরোধ করা হয়েছে।
  2. API এন্ট্রি পয়েন্ট থেকে সংস্থানগুলির তালিকা লোড করুন।
  3. "পোষা প্রাণী" শব্দটির সাথে সম্পর্কিত এমন সংস্থানটি লোড করুন।
  4. "পোষা প্রাণী" প্রতিক্রিয়া থেকে প্রতিটি সংস্থানটি দেখুন এবং স্পটের সাথে মেলে এমন একটি সন্ধান করুন।
  5. স্পট জন্য তথ্য প্রদর্শন করুন।

দ্বিতীয় লিঙ্কটি ব্যবহার করা ব্যতিক্রমের সাথে একই রকমের শৃঙ্খলা ব্যতীত হবে যে লোকেরা এপিআইতে প্রবেশের স্থান এবং আমরা প্রথমে সিস্টেমের সমস্ত লোকের একটি তালিকা পাই, মেলে এমন একটিটি খুঁজে পাই, তারপরে সমস্ত পোষা প্রাণী খুঁজে পাব find সেই ব্যক্তির কাছে (পুনরায় rel ট্যাগ ব্যবহার করে) এবং স্পট নামের একটিটি সন্ধান করুন যাতে আমরা এর সাথে সম্পর্কিত নির্দিষ্ট তথ্য প্রদর্শন করতে পারি।


ধন্যবাদ, মাইক আমি আমার প্রশ্নটি আরও স্পষ্ট করতে আপডেট করেছি। আপনার উত্তরের সমস্যাটি হ'ল আমি কোনও REST ক্লায়েন্টটি ইউআরএল পার্স করতে পারি না। যদি এটি হয়, তবে এটি ইউআরএলগুলির সাথে মিলিত হয়। এবং এটি আরইএসটি-র মূল ধারণাগুলির একটি লঙ্ঘন করে: ক্লায়েন্টদের relলিঙ্কগুলি বেছে নিতে এস ব্যবহার করা উচিত , তবে ইউআরএলগুলির কাঠামোর কোনও জ্ঞান ধরে নেওয়া উচিত নয়। আরআরএসটি দৃ as়ভাবে দাবি করে যে কোনও এআইপিআইআরএল relএকইরূপে থাকবে এমন URL গুলি পরিবর্তন করতে মুক্ত change ইউআরএল পার্স করা বিশ্রামের চেয়ে এসওএপি-র কাছাকাছি স্থানান্তরিত করে।
পাভেল গাতিলভ

আবার আপনাকে ধন্যবাদ. আমরা এতক্ষণ আমরা যে পদ্ধতি নিয়েছি তা আপনি বর্ণনা করেছেন। একরকমভাবে, আমরা শনাক্তকারীদের প্রকাশ করি। একমাত্র বিষয় হ'ল আমরা যখনই সম্ভব প্রাকৃতিক শনাক্তকারীদের প্রকাশ করার চেষ্টা করি।
পাভেল গাতিলভ

6

এর সবকিছুর অর্থ কি এই যে RESTful API গুলি ওয়েব অ্যাপ্লিকেশনগুলির ব্যাকেন্ড হিসাবে কাজ করতে পারে না?

REST API এবং একটি ওয়েব অ্যাপ্লিকেশনটির মধ্যে পার্থক্য করা সার্থক কিনা তা আমি চ্যালেঞ্জ জানাই। আপনার "ওয়েব অ্যাপ্লিকেশন" ঠিক একই সংস্থার বিকল্প (এইচটিএমএল) উপস্থাপনা হওয়া উচিত - যা বলতে হয়, আপনি কীভাবে বা কেন অ্যাক্সেসের প্রত্যাশা করছেন http://my.rest.api/...এবং http://my.web.app/...সেগুলি একই সাথে একই এবং ভিন্ন I

আপনার "ক্লায়েন্ট" এই ক্ষেত্রে ব্রাউজার এবং এটি এইচটিএমএল এবং জাভাস্ক্রিপ্ট বোঝে। যে হয় আমার মতে ওয়েব অ্যাপ্লিকেশন। এখন আপনি অসম্মতিতে এবং ভাবতে পারেন যে আপনি foo.com ব্যবহার করে কথিত ওয়েব অ্যাপ্লিকেশনটি অ্যাক্সেস করেছেন এবং api.foo.com এর মাধ্যমে অন্য সমস্ত কিছু প্রকাশ করেছেন - তবে আপনাকে জিজ্ঞাসা করতে হবে, foo.com কীভাবে আমাকে সংস্থানটির উপস্থাপনা সরবরাহ করেছিল? Foo.com এর "ব্যাক-এন্ড" api.foo.com থেকে কীভাবে সংস্থানগুলি আবিষ্কার করতে পারে তা বোঝার জন্য পুরোপুরি সক্ষম। আপনার ওয়েব অ্যাপ্লিকেশনটি কেবলমাত্র প্রক্সি হয়ে দাঁড়িয়েছে - আপনি অন্য এক API (অন্য কারও কাছ থেকে) সাথে একসাথে কথা বলার চেয়ে আলাদা নয়।

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

সুতরাং যখন আপনার ক্লায়েন্ট অ্যাক্সেস করে my.web.app/pets/1এটি পোষা প্রাণীর ইন্টারফেসটি উপস্থাপন করতে জানে কারণ এটিই সার্ভার-সাইড টেমপ্লেট দ্বারা ফিরে এসেছে, বা এটি যদি অন্য কোনও উপস্থাপনের জন্য একটি অ্যাসিনক্রোনাস অনুরোধ (যেমন জেএসএন বা এক্সএমএল) থাকে তবে বিষয়বস্তু টাইপ শিরোনাম তাই বলে ।

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

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


ওয়েব অ্যাপটি এপিআইয়ের পক্ষে কেবল উপস্থাপনা হবে বলে আমি আশা করি না। এতে প্রচুর পার্থক্য থাকতে পারে, উদাহরণস্বরূপ একক পৃষ্ঠায় কয়েকটি মূল সংস্থান সহ একাধিক শিশু সংস্থান দেখান। আমি চাই না যে ওয়েব অ্যাপ্লিকেশন url গুলিতে এপিআই ডেটা স্টোরেজের অভ্যন্তরীণ আইডিসি থাকতে পারে, আপনি যদি এই কথাটি বলতে চাইলে আমি 2 সিস্টেম একই হওয়ার আশা করি। আমি এখানে পারফরম্যান্স নিয়ে উদ্বিগ্ন নই, সমস্যা নেই। প্রশ্নটি আসলে 'আমি কীভাবে 3 টি my.web.app/pets/3এসআরটি এপিআই এর ইউরালগুলি পার্স না করে রাখি '?
পাভেল গাতিলভ

আমার নিজের পুনরায় বাক্য সংশোধন করা হচ্ছে: 'আমি কীভাবে 3 টি সংযুক্ত my.web.app/pets/3REST API রিসোর্সের URL টি পার্স না করে রেখে পারি my.rest.api/v0/persons/2/pets/3? বা আমি সেখানে কি রাখব? '
পাভেল গাতিলোভ

আমি মনে করি আপনি সেই ক্লায়েন্টের রাষ্ট্রটিকে উপস্থাপনার সাথে বিভ্রান্ত করছেন যা সেই রাষ্ট্রটি নির্ধারণ করে। তুমি করা না 3মধ্যে app/pets/3কারণ app/pets/3অস্বচ্ছ, এটা যাই হোক না কেন সম্পদ আপনার ওয়েব অ্যাপ্লিকেশন চায় স্থানটিকে চিহ্নিত করে। যদি এটি বেশ কয়েকটি অন্যান্য সংস্থার (অন্য সিস্টেমে - আপনার এপিআই তাদের মধ্যে একটি হ'ল) ​​এর সমন্বিত দৃষ্টিভঙ্গি হয় তবে ওয়েব অ্যাপ্লিকেশন সার্ভারের মধ্যে সেই সিস্টেমে হাইপারলিংকগুলি সংরক্ষণ করা এবং তারপরে পুনরুদ্ধার করা, তাদের উপস্থাপনায় সমাধান করুন ( যেমন জেএসএন বা এক্সএমএল) এবং তারপরে আপনার প্রতিক্রিয়ার অংশ হিসাবে এগুলি পরিবেশন করুন।
ডগ

এটিকে এভাবে ভাবুন - আপনার এপিআই এবং অ্যাপটিকে ভুলে যান। ধরে নিন আপনি এমন একটি সাইট তৈরি করতে চেয়েছিলেন যা লোকেরা তাদের প্রিয় ফেসবুক এবং টুইটার পোস্টগুলি সংগ্রহ করতে দেয়। সেগুলি রিমোট সিস্টেম। আপনি আপনার নিজের মাধ্যমে সেই সিস্টেমে ইউআরআই টানেল বা টেম্পলেট দেওয়ার চেষ্টা করছেন না। আপনি একটি 'বোর্ড' রিসোর্স তৈরি করতেন এবং এটি আপনার সার্ভারটিই জানে যে এটি নির্দিষ্ট board/1করে facebook.com/post/123এবং twitter.com/status/789- আপনি যখন আপনার বোর্ডের উপস্থাপনা দিতে যান, আপনাকে সেই ইউআরআইগুলিকে এমন একটি উপস্থাপনের সমাধান করতে হবে যা আপনি কাজ করতে পারেন। যেখানে প্রয়োজন সেখানে ক্যাশে।
ডগ

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

5

মুখবন্ধ

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


আবিষ্কারের জন্য নির্দিষ্ট পরিমাণ জ্ঞান প্রয়োজন, তাই এখানে আমার বাস্তব-বাস্তব পরিস্থিতি গ্রহণ করা হয়েছে:

ধরা যাক আমরা এমন একটি অনুসন্ধান পৃষ্ঠা চাই http://my.web.app/personযেখানে ফলাফলগুলি প্রতিটি ব্যক্তির বিশদ পৃষ্ঠার লিঙ্ক অন্তর্ভুক্ত করে। এক জিনিস আমাদের ফ্রন্ট-এন্ড কোড আবশ্যক অর্ডার এ সব কিছু করতে জানি তার বিশ্রাম তথ্য উৎস জন্য বেস URL হল: http://my.rest.api/api। এই ইউআরএলটিতে একটি জিইটি অনুরোধের প্রতিক্রিয়া হতে পারে:

<Links>
    <Link ref="self" href="http://my.rest.api/api" />
    <Link rel="person" href="http://my.rest.api/api/person" />
    <Link rel="pet" href="http://my.rest.api/api/pet" />
</Links>

যেহেতু আমাদের অভিপ্রায় লোকের একটি তালিকা প্রদর্শন করা, আমরা পরবর্তী লিঙ্ক href GETথেকে href একটি অনুরোধ প্রেরণ person, যা ফিরে আসতে পারে:

<Links>
    <Link ref="self" href="http://my.rest.api/api/person" />
    <Link rel="search" href="http://my.rest.api/api/person/search" />
</Links>

আমরা অনুসন্ধানের ফলাফলগুলি প্রদর্শন করতে চাই, তাই আমরা লিঙ্ক href এ GETঅনুরোধ পাঠিয়ে অনুসন্ধান পরিষেবাটি ব্যবহার করব search, যা ফিরে আসতে পারে:

<Persons>
    <Person>
        <Links>
            <Link rel="self" href="http://my.rest.api/api/person/1"/>
        </Links>
        <Pets>
            <Link rel="pet" href="http://my.rest.api/api/pet/10"/>
        </Pets>
    </Person>
    <Person>
        <Links>
            <Link rel="self" href="http://my.rest.api/api/person/2"/>
        </Links>
        <Pets>
            <Link rel="pet" href="http://my.rest.api/api/pet/20"/>
        </Pets>
    </Person>
</Persons>

শেষ পর্যন্ত আমাদের ফলাফল রয়েছে, তবে কীভাবে আমরা আমাদের ফ্রন্ট-এন্ডের ইউআরএল তৈরি করব?

আসুন আমরা যে অংশটি নির্দিষ্ট করে জানি তার অংশটি কেটে ফেলা যাক: API বেস ইউআরএল, এবং আমাদের ফ্রন্ট-এন্ড সনাক্তকারী হিসাবে বাকীটি ব্যবহার করুন:

  • পরিচিত এপিআই বেস: http://my.rest.api/api
  • স্বতন্ত্র সত্তার জন্য প্রদত্ত URL: http://my.rest.api/api/person/1
  • অনন্য আইডি: /person/1
  • আমাদের বেস ইউআরএল: http://my.web.app
  • আমাদের উত্পন্ন ফ্রন্ট-এন্ড URL: http://my.web.app/person/1

আমাদের ফলাফলগুলি দেখতে পারে:

<ul>
    <li><a href="http://my.web.app/person/1">A person</a></li>
    <li><a href="http://my.web.app/person/2">A person</a></li>
</ul>

একবার ব্যবহারকারীর বিবরণ পৃষ্ঠার সেই ফ্রন্ট-এন্ড লিঙ্কটি অনুসরণ করলে, আমরা কোন ইউআরএলে GETসেই নির্দিষ্ট বিবরণের জন্য অনুরোধটি প্রেরণ করব person? আমরা ফ্রন্ট-এন্ড ইউআরএলগুলিতে ব্যাক-এন্ড ইউআরএলগুলি ম্যাপ করার জন্য আমাদের পদ্ধতিটি জানি, তাই আমরা কেবল এটির বিপরীত:

  • ফ্রন্ট-এন্ড ইউআরএল: http://my.web.app/person/1
  • আমাদের বেস ইউআরএল: http://my.web.app
  • অনন্য আইডি: /person/1
  • পরিচিত এপিআই বেস: http://my.rest.api/api
  • উত্পন্ন API URL: http://my.rest.api/api/person/1

যদি আরআরটি এপিআই এর পরিবর্তিত হয় যে কোনও personইউআরএল এখন রয়েছে http://my.rest.api/api/different-person-base/person/1এবং কেউ আগে বুকমার্ক করেছে http://my.web.app/person/1, তবে REST এপিআই (কমপক্ষে কিছু সময়ের জন্য) পুরানো ইউআরএলটিকে নতুনটিতে পুনঃনির্দেশ দিয়ে সাড়া দিয়ে পশ্চাদপদ-সামঞ্জস্যতা সরবরাহ করবে। সমস্ত উত্পন্ন ফ্রন্ট-এন্ড লিঙ্কগুলি স্বয়ংক্রিয়ভাবে নতুন কাঠামো অন্তর্ভুক্ত করবে।

আপনি সম্ভবত লক্ষ্য করেছেন যে, এপিআই নেভিগেট করার জন্য আমাদের কয়েকটি বিষয় জানতে হবে:

  • এপিআই বেস ইউআরএল
  • personসম্পর্ক
  • searchসম্পর্ক

আমি মনে করি না যে এতে কোনও ভুল আছে; আমরা কোনও নির্দিষ্ট সময়ে একটি নির্দিষ্ট ইউআরএল কাঠামো ধরে নিচ্ছি না, সুতরাং সত্তা ইউআরএলটির কাঠামো http://my.rest.api/api/person/1পরিবর্তন হতে পারে এবং যতক্ষণ না এপিআই পশ্চাদ-সামঞ্জস্যতা সরবরাহ করে, ততক্ষণ আমাদের কোডটি কাজ করবে।


আপনি জিজ্ঞাসা করেছিলেন কীভাবে আমাদের রাউটিং যুক্তি দুটি ফ্রন্ট-এন্ড URL এর মধ্যে পার্থক্য বলতে পারে:

  • http://my.rest.api/api/person/1
  • http://my.rest.api/api/pet/3

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

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

আগে আমাদের ফ্রন্ট-এন্ড URL গুলি ফর্ম্যাটে ছিল: ${UI base}/${opaque string id}

নতুন ফর্ম্যাটটি হতে পারে: ${UI base}/${entity type}/${opaque string id}

সুতরাং /person/1উদাহরণ ব্যবহার করে , আমরা শেষ করতে চাই http://my.web.app/person/person/1

এই ফর্ম্যাটটি সহ, আমাদের ইউআই রাউটিং যুক্তিটি কাজ করবে /person/person/1এবং জেনে যে স্ট্রিংয়ের প্রথম টোকেনটি আমাদের নিজেরাই inোকানো হয়েছিল, আমরা এটিকে টেনে বের করে উপযুক্ত (ব্যক্তি, উদাহরণস্বরূপ) এর উপর ভিত্তি করে বিশদ পৃষ্ঠাতে যেতে পারি। যদি আপনি সেই ইউআরএলটি সম্পর্কে মেষশাবক বোধ করেন তবে আমরা সেখানে আরও কিছুটা sertোকাতে পারি; হতে পারে: http://my.web.app/person/detail/person/1

যে ক্ষেত্রে আমরা /person/detailরাউটিংয়ের জন্য বিশ্লেষণ করব এবং বাকীটি অস্বচ্ছ স্ট্রিং আইডি হিসাবে ব্যবহার করব।


আমি মনে করি এটি এপিআই-তে ওয়েব অ্যাপের চূড়ান্ত সংযোগের পরিচয় দেয়।

আমি অনুমান করছি আপনার অর্থ হ'ল, যেহেতু আমাদের উত্পন্ন ফ্রন্ট-এন্ড ইউআরএল এ পিআইএল ইউআরএলটির কিছু অংশ রয়েছে, যদি এপিআই ইউআরএল কাঠামোটি পুরানো কাঠামোকে সমর্থন না করে পরিবর্তিত হয় তবে বুকমার্কযুক্ত ইউআরএলটি অনুবাদ করতে আমাদের একটি কোড পরিবর্তন দরকার এপিআই ইউআরএল এর নতুন সংস্করণ। অন্য কথায়, যদি REST এপিআই কোনও সংস্থার আইডি (অস্বচ্ছ স্ট্রিং) পরিবর্তন করে তবে আমরা পুরানো আইডি ব্যবহার করে সেই সংস্থান সম্পর্কে সার্ভারের সাথে কথা বলতে পারি না। আমি মনে করি না আমরা এই পরিস্থিতিতে কোনও কোড পরিবর্তন এড়াতে পারি।

আমি যদি ওয়েব অ্যাপ্লিকেশনটির জন্য ইউআরএল কাঠামোটি এপিআই-র চেয়ে আলাদা করতে পারি?

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

আমার ওয়েব অ্যাপের সত্ত্বাগুলি যদি এপিআই সত্তাগুলি 1-1 তে মানচিত্র না দেয় তবে কী হবে?

উত্তর সম্পর্কের উপর নির্ভর করে। যে কোনও উপায়ে, আপনার এপিআই ইউআরএলগুলির ফ্রন্ট-এন্ড ম্যাপ করার একটি উপায় প্রয়োজন।


এই পদ্ধতির সাথে আমার একটি সমস্যা আছে। এটি আসলে আমার সমাধানের তালিকার 1 নম্বর। আমি কি পাবেন না এই: যদি ওয়েব অ্যাপ্লিকেশন URL গুলি এবং অস্বচ্ছ স্ট্রিং (ঠিক যেমন একইরূপে অনন্য আইডি ব্যাখ্যা নেই person/1, pet/3), তারপর কিভাবে এটি জানি যে একটি ব্রাউজার খোলে যাবে http://my.rest.api/api/person/1, এটা ব্যক্তি UI 'তে দেখানো উচিত এবং যদি এটি খোলা http://my.rest.api/api/pet/3, তারপর পোষা ইউআই?
পাভেল গাতিলভ

ভাল প্রশ্ন! আমি আমার প্রতিক্রিয়া দিয়ে উত্তর আপডেট করেছি।
মাইক পার্টরিজ

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

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

এখানে আমার প্রাথমিক উদ্বেগ কিছুটা বেশি ব্যবহারিক is আমি ওয়েব অ্যাপটি বাস্তবায়নের জন্য এএসপি.নেট এমভিসি ব্যবহার করি এবং কিছু অভ্যন্তরীণ নিয়মের কারণে আমাকে অ্যাপ্লিকেশন সমর্থন করে ইউআরএল নিদর্শনগুলি সংজ্ঞায়িত করতে হয়। অর্থাত্ যদি / a / {id defined সংজ্ঞায়িত করা হয় তবে অ্যাপটি হস্তান্তর করবে / a / 1, তবে / a / 1 / b / 2 নয়। এটি যদি ওয়েস্ট অ্যাপটি ইউআরএলগুলি কেবল বুকমার্কযুক্ত ইউআরএল সংরক্ষণের জন্যই পরিবর্তন করে না, মূল থেকে নেভিগেট করার সময় কেবল ওয়েব অ্যাপ্লিকেশনটিকে কাজ করতে সক্ষম হয় তবে ওয়েব অ্যাপ্লিকেশনটি পুনরায় কম্পাইল করার প্রয়োজনীয়তা বাড়ে। কেবলমাত্র এইচটিএমএল পৃষ্ঠাগুলিতে এম্বেড থাকা হাইপারলিঙ্কগুলি ব্যতীত কাজ করবে না।
পাভেল গাতিলভ

2

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

আমার সত্তাগুলির কাঁচা শনাক্তকারীদের প্রকাশ করা উচিত নয়, বরং rel = "স্ব" দ্বারা হাইপার লিঙ্কগুলি ফিরিয়ে দেওয়া উচিত

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

এটি ভারসাম্যের প্রশ্ন - আপনি কি পারফরম্যান্স ত্যাগ করতে চান (এবং আপনার কোডটিকে আরও জটিল করে তুলবেন) তবে আরও নমনীয় একটি সিস্টেম পাবেন? অথবা আপনি আপনার এপিআই / মডেলের পরিবর্তনগুলি চালু করার পরে জিনিসগুলি দ্রুত এবং সরল রাখতে পছন্দ করেন তবে পরে অর্থ প্রদান করেন?

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

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

এর সবকিছুর অর্থ কি এই যে RESTful API গুলি ওয়েব অ্যাপ্লিকেশনগুলির ব্যাকেন্ড হিসাবে কাজ করতে পারে না?

আমি মনে করি এর অর্থ হ'ল আপনাকে নিখুঁত REST বাস্তবায়ন তৈরি করতে হবে না। আপনি আপনার দ্বিতীয় সমাধান সহ যেতে পারেন, বা সত্তা আইডি প্রকাশ করতে পারেন বা এপিআই ইউআরএল পাস করতে পারেন । এর প্রভাব এবং ট্রেড-অফগুলি যতক্ষণ আপনি বুঝতে পারছেন ঠিক আছে।


0

Atom Syndication Formatআপনি ভাল কিছু অনুরূপ যদি আপনি আঁকুন আমি জিনিস ।

এখানে এন্ট্রি প্রতিনিধিত্ব করা বর্ণনা করে এমন মেটাডেটা অতিরিক্ত উপাদান / বৈশিষ্ট্য ব্যবহার করে নির্দিষ্ট করা যেতে পারে:

  • অনুযায়ী [RFC4287] , একটি কোনো URI যা স্বতন্ত্র এণ্ট্রি চিহ্নিত রয়েছে

  • অনুযায়ী [RFC4287] , এই উপাদান ঐচ্ছিক। যদি এটি অন্তর্ভুক্ত থাকে তবে এটিতে ইউআরআই রয়েছে কোনও ক্লায়েন্টকে এন্ট্রি পুনরুদ্ধার করতে ব্যবহার করা উচিত।

এই মাত্র আমার দুটি সেন্ট।


হয়তো আমি কিছু পাই না, তবে আমার কাছে মনে হচ্ছে যে আপনার উত্তরটি কোনও ওয়েব অ্যাপ্লিকেশনের ইউআরএলগুলি কীভাবে তৈরি করা যায় যা একটি রেস্ট এপিআইয়ের ক্লায়েন্ট, তা কী তা ব্যাখ্যা করে না?
পাভেল গাতিলভ

0

ইউআরএল সম্পর্কে চিন্তা করবেন না, মিডিয়া ধরণের সম্পর্কে চিন্তা করুন।

এখানে দেখুন (বিশেষত তৃতীয় বুলেট পয়েন্ট)

একটি REST এপিআই এর প্রায় সমস্ত বর্ণনামূলক প্রচেষ্টাকে সম্পদ উপস্থাপন এবং ড্রাইভিং অ্যাপ্লিকেশন স্থিতির জন্য ব্যবহৃত মিডিয়া ধরণের (গুলি) সংজ্ঞায়িত করতে বা বিদ্যমান স্ট্যান্ডার্ড মিডিয়া ধরণের জন্য প্রসারিত সম্পর্কের নাম এবং / অথবা হাইপারটেক্সট-সক্ষম মার্ক-আপ সংজ্ঞায়িত করতে ব্যয় করা উচিত .. ।


একটি সাধারণ ওয়েব অ্যাপ্লিকেশনটির ক্ষেত্রে, ক্লায়েন্টটি একজন মানুষ ; ব্রাউজারটি কেবলমাত্র একটি এজেন্ট

সুতরাং একটি অ্যাঙ্কর ট্যাগ মত

          <a href="example.com/foo/123">click here</a>

অনুরূপ কিছু অনুরূপ

          <link type="text/html" rel="self" href="example.com/foo/123">

ইউআরএলটি এখনও ব্যবহারকারীর কাছে অস্বচ্ছ, তিনি যে সমস্ত বিষয়ে যত্নশীল তা মিডিয়া ধরণের (যেমন text/html, application/pdf, application/flv, video/x-flv, image/jpeg, image/funny-cat-picture etc)) অ্যাঙ্কারে থাকা বর্ণনামূলক পাঠ্যটি (এবং শিরোনামের গুণাবলীতে) কেবল সম্পর্কের প্রসারকে এমনভাবে প্রসারিত করার একটি উপায় যা মানুষের কাছে বোধগম্য।

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

সংক্ষেপে

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


রড্রিক, আমার প্রশ্নটি এপিআই তৈরির বিষয়ে নয়, বরং একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা যা একটি রেস্টলফুল এপিআইয়ের শীর্ষে রয়েছে। আমি সহজেই বুঝতে পারি যে কীভাবে মিডিয়া টাইপগুলি আমাকে ওয়েব অ্যাপ্লিকেশনটির জন্য ইউআরএল তৈরি করতে সহায়তা করতে পারে। যদিও পরিষেবা চুক্তি এবং আবিষ্কারের জন্য মিডিয়া প্রকারগুলি গুরুত্বপূর্ণ।
পাভেল গাতিলভ

@ পাভেলগাতিলভ - আপনার ওয়েব অ্যাপের ক্লায়েন্ট কি মানব?
রড্রিক চ্যাপম্যান

হ্যাঁ, তাই এবং একটি খুব আন্ডারকিল্ড।
পাভেল গাতিলভ

0

সহজতম উপায়টি সম্ভবত সংস্থানগুলির API URLগুলি তাদের স্ট্রিং সনাক্তকারী হিসাবে ব্যবহার করছে using তবে http://my.web.app/Press/http%3A%2F%2Fmy.rest.api%2Fapi%2FPress%2F1234 এর মতো ওয়েব পৃষ্ঠাগুলি url কুরুচিপূর্ণ।

আমি মনে করি আপনি ঠিক বলেছেন, এটিই সহজতম উপায়। আপনি http://my.rest.api/apiকম কুরুচিপূর্ণ করার জন্য আপনি URL গুলি পুনরায় সংযুক্ত করতে পারেন:

http://my.web.app/person/person%2F1234

যদি API এর সরবরাহিত URL টি সেই বেসের সাথে সম্পর্কিত না হয়, তবে এটি কুরুচিপূর্ণ ফর্মের কাছে অবনমিত হয়:

http://my.web.app/person/http%3A%2F%2Fother.api.host%2Fapi%2Fperson%2F1234

এটিকে আরও একধাপ এগিয়ে নিয়ে যাওয়ার জন্য, আপনি কোন ধরণের ভিউ উপস্থাপন করতে চান এবং পাথ বিভাগের ডিলিমিটার এবং কলোনগুলি এনকোডিং বন্ধ করতে চান তা নির্ধারণ করতে API সার্ভারের প্রতিক্রিয়াটি পরীক্ষা করুন:

http://my.web.app/person/1234 (best case)
http://my.web.app/http://other.api.host/api/person/1234 (ugly case)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.