সত্তা বডি ছাড়া HTTP পোষ্ট সম্পাদন করা কি খারাপ অভ্যাস হিসাবে বিবেচিত হয়?


176

আমাকে এমন একটি প্রক্রিয়া শুরু করতে হবে যা ব্যবহারকারীর থেকে কোনও ইনপুট প্রয়োজন হয় না, কেবল একটি ট্রিগার। প্রক্রিয়াটি ট্রিগার করতে আমি কোনও দেহ ছাড়াই POST / uri ব্যবহার করার পরিকল্পনা করছি। আমি জানতে চাই যে এটি HTTP এবং REST উভয় দৃষ্টিকোণ থেকে খারাপ হিসাবে বিবেচিত হয়?


6
সকলকে ধন্যবাদ তোমার সাজেসনের জন্য. যদিও প্রত্যেকে অনুরূপ পরামর্শ দিয়েছে যেমন শূন্য সামগ্রী সহ পোষ্ট করা ঠিক আছে তবে আইইটিএফ আলোচনার লিঙ্কের কারণে আমি ড্যারেলের উত্তরটি সঠিক হিসাবে নির্বাচন করছি। আলোচনা অনেক স্পষ্ট করে।
সুরেশ কুমার

উত্তর:


155

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


4
কোনও আপডেট হওয়া উত্স যা 10 বছর পরে নিশ্চিত করবে?
ব্যাপটিস্ট পার্নেট

79

জিইটির পরিবর্তে একটি পোষ্ট ব্যবহার করা পুরোপুরি যুক্তিসঙ্গত, কারণ এটি সার্ভারকে (এবং গেটওয়েগুলি) কে ক্যাশেড প্রতিক্রিয়া না ফেরানোর জন্য নির্দেশ দেয়।


50

পোস্ট সম্পূর্ণরূপে ঠিক আছে। পোস্টের সাথে জিইটির পার্থক্যের ক্ষেত্রে আপনি সিস্টেমের অবস্থা পরিবর্তন করছেন (সম্ভবত আপনার ট্রিগার কিছু করছেন "এবং ডেটা পরিবর্তন করছেন)।

আমি ইতিমধ্যে পে-লোড ছাড়াই পোস্ট ব্যবহার করেছি এবং এটি "অনুভূতি" ঠিক আছে। পে-লোড ছাড়াই POST ব্যবহার করার সময় আপনার একটি জিনিস করা উচিত: পাস শিরোনামContent-Length: 0 । আমি এপিআই-ক্লায়েন্টটি পাস না করে কিছু প্রক্সিগুলির সাথে সমস্যাগুলি মনে করি।


16

আপনি যদি কোনও দেহ ছাড়াই পোষ্ট / ইউরি ব্যবহার করেন তবে এটি এমন কোনও ফাংশন ব্যবহার করার মতো যা আর্গুমেন্ট গ্রহণ করে না eeg int post (void); সুতরাং আপনার রিসোর্স ক্লাসে ফাংশন যুক্তিসঙ্গত যা কোনও যুক্তি ছাড়াই কোনও বস্তুর অবস্থা পরিবর্তন করতে পারে। আপনি যদি ইউআরআইয়ের জন্য ইউনিক্স টাচ ফাংশনটি বাস্তবায়নের কথা বিবেচনা করেন, তবে এটি কি ভাল পছন্দ নয়?


6
টাচ / আঙুল হ'ল সহজাত সামগ্রী-কম এমন একটি আদর্শহীন কর্মের পাঠ্যপুস্তকের চিত্র।
ক্রিস মেরিসিক

2

হ্যাঁ, কোনও দেহ ছাড়াই একটি POST অনুরোধ প্রেরণ করা এবং এর পরিবর্তে ক্যোরি স্ট্রিং প্যারামিটারগুলি ব্যবহার করা ঠিক। তবে সাবধান হন যদি আপনার প্যারামিটারগুলিতে এমন অক্ষর রয়েছে যা HTTP বৈধ নয় তবে আপনাকে সেগুলি এনকোড করতে হবে।

উদাহরণস্বরূপ, আপনার যদি 'হ্যালো ওয়ার্ল্ড'-এ এবং শেষের পয়েন্টটি পোস্ট করতে হয় তবে আপনাকে এটিকে এমন দেখাচ্ছে: http://api.com?param=hello%20world


0

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

"post_disable_db" পদ্ধতিটি কেবলমাত্র একটি পাথ প্যারামিটার "db_name" গ্রহণ করে এবং ২ য় প্যারামিটার নেই যা বাধ্যতামূলক বডি বোঝায়।

@router.post('/{db_name}/disable',
             status_code=HTTP_200_OK,
             response_model=ResponseSuccess,
             summary='',
             description=''
             )
async def post_disable_db(db_name: str):
    try:
        response: ResponseSuccess = Handlers.databases_handler.post_change_db_enabled_state(db_name, False)
    except HTTPException as e:
        raise (e)
    except Exception as e:
        logger.exception(f'Changing state of DB to enabled=False failed due to: {e.__repr__()}')
        raise HTTPException(HTTP_500_INTERNAL_SERVER_ERROR, detail=e.__repr__())

    return response

এখানে চিত্র বর্ণনা লিখুন

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