পোস্টের পরে সামগ্রী ফেরত দেওয়া কি ঠিক আছে?


89

আমি রিসলেট ব্যবহার করছি এবং আমি একটি সংস্থান তৈরি করেছি। আমি ওভাররাইড acceptRepresentationপদ্ধতিতে POST পরিচালনা করি ।

ক্লায়েন্ট আমাকে কিছু তথ্য পাঠাতে হবে, তারপর আমি ডিবি, 201 (SUCCESS_CREATED) এর সেট প্রতিক্রিয়া সঞ্চয় এবং আমি ক্লায়েন্ট কিছু ডেটা ফিরে যাওয়ার প্রয়োজন, কিন্তু এর রিটার্ন টাইপ acceptRepresentationহয় void

আমার ক্ষেত্রে, আমাকে কিছু শনাক্তকারী ফিরিয়ে দিতে হবে যাতে ক্লায়েন্ট সেই সংস্থানটি অ্যাক্সেস করতে পারে।

উদাহরণস্বরূপ, যদি আমার ইউআরএল সহ কোনও সংস্থান থাকে /resourceএবং ক্লায়েন্ট পোস্টের অনুরোধ পাঠায় আমি ডিবিতে একটি নতুন সারি যুক্ত করব এবং এর ঠিকানাটি হওয়া উচিত /resource/{id}। আমার পাঠাতে হবে {id}

আমি কি ভুল কিছু করছি? REST নীতিগুলি কি পোস্টের পরে কিছু ফেরত দিতে দেয়? যদি হ্যাঁ, আমি কীভাবে এটি করতে পারি এবং যদি না হয় তবে এই পরিস্থিতিটি পরিচালনা করার উপায় কী?


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

উত্তর:


97

REST কেবল বলেছেন যে আপনার ইউনিফর্ম ইন্টারফেসের সাথে সামঞ্জস্য করা উচিত। অন্য কথায়, এটি বলছে যে HTTP অনুমান অনুসারে পোষ্টের যা করা উচিত তা করা উচিত । প্রাসঙ্গিক সেই অনুমানের উদ্ধৃতি এখানে,

যদি উত্স সার্ভারে কোনও উত্স তৈরি করা থাকে, তবে প্রতিক্রিয়াটি 201 (হওয়া উচিত) হওয়া উচিত এবং এতে একটি সত্তা থাকতে হবে যা অনুরোধের স্থিতি বর্ণনা করে এবং নতুন সংস্থান, এবং একটি অবস্থান শিরোনাম (বিভাগ 14.30 দেখুন)।

আপনি এটি থেকে দেখতে পাচ্ছেন, আপনার দুটি জায়গা রয়েছে যেখানে আপনি ক্লায়েন্টকে নির্দেশ করতে পারবেন যেখানে সদ্য তৈরি হওয়া সংস্থান রয়েছে। লোকেশন শিরোনামটির একটি URL থাকা উচিত যা নতুন সংস্থানকে নির্দেশ করে এবং আপনি বিশদ সহ কোনও সত্তাও ফিরিয়ে দিতে পারেন।

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


4
@ ডেল-বয়: কীভাবে গ্রহণযোগ্যতার মধ্যে থেকে প্রতিক্রিয়া বডি সেট করতে হয় তার জন্য থমের উত্তর দেখুন ()
আভি ফ্ল্যাক্স

4
এইচটিটিপি অনুমানের উদ্ধৃতিটি কোনও প্রতিক্রিয়া নিষিদ্ধ করে না, আপনি যদি Section নং অনুচ্ছেদটি দেখেন তবে এটি স্পষ্ট: এটি অনুমোদিত: Request and Response messages MAY transfer an entity if not otherwise restricted by the request method or response status code. An entity consists of entity-header fields and an entity-body, although some responses will only include the entity-headers.
মাইকএফ

@ মাইকএফ এটি অনুমান করা আমার উদ্দেশ্য নয় যে প্রতিক্রিয়া সংস্থার অনুমতি নেই। আমি উল্লেখ করা সেই অনুমানের অংশটি নির্দিষ্ট করে "এবং এতে একটি সত্ত্বা রয়েছে" বলে says আমার লেখায় আমার আরও পরিষ্কার হওয়া উচিত ছিল।
ড্যারেল মিলার

16

আমি প্রতিক্রিয়া শরীরে কিছু প্রেরণ করতে চাই। সবেমাত্র অবস্থান নির্ধারণ করুন: নতুন নির্মিত সংস্থার (পূর্ণ) URL এ to

আপনার বিবরণটি বোঝায় যে এটি হ'ল অর্থার্থক:

  1. এটি তৈরি করার জন্য একটি জিনিস পোস্ট করুন
  2. দুটি জিনিস জানতে যথেষ্ট সাড়া দিন:
    1. যে সৃষ্টিটি ঘটেছে (২০১২)
    2. নতুন জিনিসটি কোথায় পাবেন (অবস্থান শিরোনাম)

অন্য কিছুরই অতিরিক্ত প্রয়োজন।


উইকিপিডিয়া সর্বদা একটি ভাল উত্স নয়, তবে এটিও দাবি করে যে "[...] নতুন তৈরি হওয়া
আরজান

4
পোস্ট এক বা একাধিক সংস্থান তৈরি করে এমন যুক্তি সম্পাদন করতে পারে। প্রসেসিংয়ের ফলাফল ক্লায়েন্টের প্রয়োজন হতে পারে। সুতরাং, প্রতিক্রিয়া হিসাবে এটি ফেরত API এ এক বা একাধিক জিইটি কল করার প্রয়োজনীয়তা এড়িয়ে চলে। পোষ্ট পদ্ধতি দ্বারা তৈরি করা / পরিবর্তিত ডেটা ক্লায়েন্টের জন্য অতিরিক্ত অতিরিক্ত হতে পারে না (এবং প্রায়শই হয় না)।
পাওলো মেরসন

10

দুটি ভিন্ন প্রশ্ন:

আরইএসটি অ্যাপ্লিকেশন প্যাটার্নটি কোনও পোস্টে ডেটার রিটার্নিং সমর্থন করে?

আমি মনে করি না আরইএসটি এটি স্পষ্টভাবে অস্বীকার করে না তবে পছন্দসই চিকিত্সাটি ড্যারেলের উত্তরে বর্ণিত।

RESTlet ফ্রেমওয়ার্কটি কোনও পোস্টে ডেটা ফেরানোর অনুমতি দেয়?

হ্যাঁ, এটি অকার্যকর হওয়া সত্ত্বেও, এমন একটি শ্রেণিতে যা রিসোর্সকে প্রসারিত করে, আপনি getResponse () পদ্ধতির মাধ্যমে রেসপন্স অবজেক্ট অবজেক্টে সম্পূর্ণ অ্যাক্সেস পাবেন। সুতরাং আপনি যা চান ডেটা দিয়ে getResponse ()। SetEntity () কল করতে পারেন।


6

অনুরোধ করা যাই হোক না কেন বিন্যাসে এটি আউটপুট। এটি হতে পারে:

<success>
    <id>5483</id>
</success>

বা:

{ "type": "success", "id": 5483 }

এটি সাধারণত আপনি যা করেন তার উপর নির্ভর করে। যদি তারা ডেটা প্রত্যাশা না করে তবে তাদের কেবল এটি উপেক্ষা করা উচিত, তবে যে কোনও ক্লায়েন্ট এটি সঠিকভাবে পরিচালনা করতে চায় তাদের সক্ষম হওয়া উচিত।


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

1

আপনি যদি কোনও স্থান পুনর্নির্দেশের পরিবর্তে কোনও সত্তা সংস্থা নিয়ে তৈরি করা 201 এর প্রতিক্রিয়া জানান তবে প্রতিক্রিয়াটিতে প্রতিনিধিত্ব করা হচ্ছে এমন সংস্থানটির দিকে ইঙ্গিত করে একটি সামগ্রী-অবস্থান শিরোনাম অন্তর্ভুক্ত করা ভাল idea

এটি সম্ভাব্য বিভ্রান্তি এড়াতে পারে - যার মধ্যে কোনও ক্লায়েন্ট (ন্যায়সঙ্গতভাবে) ধরে নিতে পারে যে প্রতিক্রিয়া সত্তা আসলে 'স্রষ্টা'র একটি নতুন রাষ্ট্রের প্রতিনিধিত্ব করে, না তৈরি হওয়া উত্সকে।

> POST /collection
> ..new item..

< 201 Created
< Location: /collection/1354
< Content-Location: /collection/1354
< <div class="item">This is the new item that was created</div>

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

4
অবস্থানের শিরোনামটি তৈরি করা সংস্থানটি কোথায় রয়েছে তা বোঝাতে (২০১২ প্রতিক্রিয়াতে) ব্যবহৃত হয়; এটি যে প্রতিক্রিয়াটি দেয় তার সত্তা সংস্থার সাথে এটি প্রাসঙ্গিক নয়। আমার বক্তব্যটি ছিল - আপনি যদি ২০১২ সালের প্রতিক্রিয়াতে তৈরি হওয়া সংস্থানটি নিজেই অন্তর্ভুক্ত করতে চান (ক্লায়েন্টকে অন্য ইউআরআইতে পরিচালনা / পুনর্নির্দেশের পরিবর্তে) তবে কোনও সামগ্রী-অবস্থানের শিরোনামটি একটি ভাল ধারণা হবে। এটি সম্ভবত 'নিয়মগুলি কিছুটা বাঁকানো', তবে ক্লায়েন্টের কাছে নতুন সংস্থার অবস্থা পেতে অন্য অনুরোধ / প্রতিক্রিয়াচক্রের প্রয়োজনের চেয়ে এটি আরও দক্ষ।
মাইকে

আমাকে বোঝাতে। আমি এর আগে কখনও সামগ্রী-অবস্থানের শিরোনাম ব্যবহার করি নি।
ড্যারাল মিলার 16

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

4
@ রিটারপটেবল: আমি বিশ্বাস করি যে আরএসএসটি হ'ল এপিআই ডিজাইন করার জন্য, যেখানে এ কোনও ব্যবহারকারী এজেন্টের পক্ষে দাঁড়ান না যা কিছু HTML রেন্ডার করার জন্য দেখায়।
হার্মিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.