آموزش جامع دریافت و پردازش اطلاعات JSON در PHP بر اساس استاندارد گوگل
مقدمه
امروزه فرمت متنی JSON به عنوان استانداردی بیرقیب جهت انتقال دادهها میان سرور و کلاینت شناخته میشود. در فریمورکها و کتابخانههای مدرن، تبادل اطلاعات عمدتاً بر پایه همین فرمت انجام میگیرد. دریافت صحیح و اصولی این دادهها در زبان برنامهنویسی PHP با رعایت الزامات امنیتی و استانداردهای شرکت گوگل، پایداری وبسایت یا وبسرویس شما را تضمین میکند. در این مقاله به آموزش گامبهگام این فرآیند میپردازیم.
۱. چرا متغیر $_POST برای دادههای JSON کارآمد نیست؟
زمانی که کلاینت دادهها را با هدر Content-Type: application/json ارسال میکند، PHP به صورت خودکار قادر به پر کردن متغیر سراسری $_POST نخواهد بود. برای دستیابی به بدنه پیام خام ارسال شده، میبایست از جریان ورودی شبیهسازیشده پیاچپی با نام php://input استفاده کنیم.
۲. دریافت جریان خام ورودی در PHP
مطابق مستندات توسعه گوگل، اولین قدم دریافت بدنه خام درخواست و بررسی خالی نبودن آن است:
$rawInput = file_get_contents('php://input');
if (empty($rawInput)) {
http_response_code(400);
echo json_encode(["error" => "بدنه درخواست ارسالی خالی است."]);
exit;
}
۳. اعتبارسنجی هدر درخواست (Content-Type)
برای اطمینان از اینکه کلاینت حتماً دادهها را در قالب JSON ارسال کرده است، بررسی هدر درخواست جزو اصول اساسی گوگل به شمار میرود:
$contentType = isset($_SERVER['CONTENT_TYPE']) ? trim($_SERVER['CONTENT_TYPE']) : '';
if (strpos($contentType, 'application/json') === false) {
http_response_code(415); // Unsupported Media Type
echo json_encode(["error" => "فرمت هدر ارسالی باید application/json باشد."]);
exit;
}
۴. تبدیل JSON به آرایه یا شیء با متد ایمن و مدرن
در نسخههای جدید PHP (نسخه 7.3 به بالا)، روش توصیه شده برای کار با تابع json_decode، فعالسازی پرچم JSON_THROW_ON_ERROR است. این فلگ باعث میشود در صورت بروز خطای ساختاری در جیسان، یک استثنا (Exception) پرتاب شود که به راحتی قابل رهگیری و مدیریت است:
try {
// آرگومان دوم true باعث تبدیل شدن خروجی به آرایه انجمنی (Associative Array) میشود
$data = json_decode($rawInput, true, 512, JSON_THROW_ON_ERROR);
// دسترسی ایمن به مقادیر آرایه
$username = $data['username'] ?? null;
$email = $data['email'] ?? null;
if (!$username || !$email) {
throw new Exception("پارامترهای ارسالی ناقص هستند.");
}
// انجام عملیات نهایی بر روی دادهها
// ...
} catch (JsonException $e) {
http_response_code(400);
echo json_encode([
"success" => false,
"message" => "خطا در ساختار متنی JSON ارسالی: " . $e->getMessage()
]);
exit;
} catch (Exception $e) {
http_response_code(422);
echo json_encode([
"success" => false,
"message" => $e->getMessage()
]);
exit;
}
۵. بازگرداندن پاسخ نهایی مناسب
همیشه پس از اتمام پردازش دادهها، پاسخ خروجی را با هدر مناسب به کلاینت ارجاع دهید:
header('Content-Type: application/json; charset=utf-8');
echo json_encode([
"success" => true,
"message" => "اطلاعات کاربری با موفقیت پردازش شد."
]);
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید