ویرگول
ورودثبت نام
Nastooh
Nastooh
Nastooh
Nastooh
خواندن ۸ دقیقه·۵ ماه پیش

API -Content types of body

Content-Type of Body چیست؟

Content-Type در Header مشخص می‌کند بدنه‌ی Request با چه فرمتی ارسال شده و Server باید آن را با چه parser و چه منطق پردازشی بخواند.
در تست API، فهم Content-Type خیلی مهم است چون اگر Header و Body با هم سازگار نباشند، ممکن است 400 Bad Request، 415 Unsupported Media Type، Validation Error یا حتی Contract Mismatch رخ دهد.

نکته‌ی اصلی این سرفصل این است که در تست API فقط خود Body مهم نیست؛ باید نوع Body + Header مربوط به آن + رفتار Parsing سمت Server را با هم ببینی.


raw JSON چیست؟

در این حالت، بدنه‌ی درخواست به‌صورت JSON خام ارسال می‌شود و معمولاً Header به این شکل است:

Content-Type: application/json

نمونه:

{ "firstName": "Ali", "lastName": "Ahmadi", "age": 30 }

JSON رایج‌ترین فرمت در REST APIهاست و برای ارسال داده‌های ساختاریافته، آبجکت‌ها، آرایه‌ها و مدل‌های پیچیده استفاده می‌شود.

نکات تستی مهم برای raw JSON

  • بررسی کن Header = application/json درست ست شده باشد.

  • بررسی کن Schema و ساختار JSON درست باشد.

  • نوع داده‌ها را تست کن: عدد، رشته، بولین، null

  • فیلد اجباری / اختیاری را تست کن.

  • Malformed JSON را تست کن؛ مثل براکت جاافتاده، کوتیشن اشتباه، comma اضافی

  • اگر Content-Type درست باشد ولی JSON خراب باشد، معمولاً 400 Bad Request منطقی است.

  • اگر Body اصلاً JSON نباشد ولی Content-Type: application/json باشد، باز هم باید رفتار Validation / Parsing بررسی شود.


XML چیست؟

در این حالت، بدنه‌ی درخواست به‌صورت XML ارسال می‌شود و معمولاً Header این است:

Content-Type: application/xml

نمونه:

<customer> <firstName>Ali</firstName> <lastName>Ahmadi</lastName> <age>30</age> </customer>

XML نسبت به JSON ساختار متنی با tag دارد و در بعضی سیستم‌های قدیمی، بانکی، SOAP-محور یا یکپارچه‌سازی‌های سازمانی هنوز زیاد دیده می‌شود.

نکات تستی مهم برای XML

  • بررسی کن API اصلاً XML را پشتیبانی می‌کند یا نه.

  • درست بودن Content-Type: application/xml را چک کن.

  • Well-formed بودن XML را تست کن؛ مثل بسته شدن tagها، nesting درست، quote درست attributeها

  • اگر سیستم XSD یا XML schema validation دارد، Schema Validation را تست کن.

  • کاراکترهای خاص، encoding و داده‌های null/empty را تست کن.

  • اگر API فقط JSON قبول کند و XML بفرستی، پاسخ مناسب معمولاً 415 Unsupported Media Type یا طبق Contract است.


form-data چیست؟

form-data معمولاً برای ارسال داده‌های فرم به‌همراه فایل استفاده می‌شود و معمولاً Header به این شکل است:

Content-Type: multipart/form-data

در form-data، هر فیلد به‌صورت یک part جداگانه ارسال می‌شود و هر part می‌تواند متن یا فایل باشد.
مثلاً برای ثبت کاربر همراه با عکس کارت ملی، رزومه، امضا یا فایل ضمیمه از این نوع استفاده می‌شود.

نمونه‌ی مفهومی:

  • firstName = Ali

  • lastName = Ahmadi

  • avatar = profile.jpg

نکات تستی مهم برای form-data / multipart

  • وجود فیلدهای متنی و فایل را هم‌زمان تست کن.

  • فرمت فایل، حجم فایل، پسوند فایل و MIME type را تست کن.

  • سناریوهای فایل خالی، فایل خراب، فایل خیلی بزرگ، پسوند ممنوع را تست کن.

  • بررسی کن اگر فیلد فایل required است، نبود آن چه خطایی می‌دهد.

  • اگر سیستم روی نام فایل یا نوع فایل Validation دارد، حتماً تست منفی طراحی کن.

  • در تست امنیتی، آپلود فایل مخرب / executable / script هم از جنس ریسک‌های مهم است.


x-www-form-urlencoded چیست؟

این نوع برای ارسال داده‌های فرم بدون فایل استفاده می‌شود و معمولاً Header آن این است:

Content-Type: application/x-www-form-urlencoded

در این حالت داده‌ها به‌صورت key=value و با & به هم متصل می‌شوند.

نمونه:

username=ali&password=123456&rememberMe=true

این نوع معمولاً در فرم‌های login قدیمی، OAuth token request، بعضی gatewayها و برخی سرویس‌های ساده‌تر دیده می‌شود.

نکات تستی مهم برای x-www-form-urlencoded

  • بررسی کن API این نوع Content-Type را می‌پذیرد یا نه.

  • Encoding کاراکترها، فاصله، کاراکتر فارسی، +، % و کاراکترهای special را تست کن.

  • سناریوهای پارامتر تکراری، پارامتر خالی، پارامتر جاافتاده را تست کن.

  • اگر Body باید form-urlencoded باشد ولی JSON بفرستی، باید رفتار API را از نظر Contract بررسی کنی.

  • برای endpointهایی مثل login یا token generation، این نوع خیلی مهم است.


multipart/form-data چیست؟

multipart/form-data در واقع همان فرمت استاندارد form-data برای ارسال چند بخش مجزا در بدنه است.
یعنی وقتی در ابزارهایی مثل Postman نوع form-data را انتخاب می‌کنی، در سطح HTTP معمولاً Content-Type واقعی می‌شود:

Content-Type: multipart/form-data; boundary=...

پس از نظر مفهومی:

  • form-data = مدل کاری در ابزار تست

  • multipart/form-data = فرمت HTTP واقعی که Request با آن ارسال می‌شود

کاربرد اصلی multipart

  • آپلود فایل

  • ارسال هم‌زمان فایل + داده متنی

  • فرم‌های پیچیده با چند فیلد و چند ضمیمه

نکته مهم امتحانی

اگر در سؤال از form-data و multipart جداگانه نام برده شد، بهتر است بگویی:

  • form-data در عمل معمولاً با multipart/form-data روی HTTP ارسال می‌شود.

  • تفاوتش با x-www-form-urlencoded این است که multipart برای فایل و بخش‌های مجزا مناسب است، ولی x-www-form-urlencoded برای فیلدهای متنی ساده و بدون فایل.


تفاوت اصلی raw JSON / XML / form-data / x-www-form-urlencoded / multipart

1) از نظر ساختار

  • JSON → داده‌ی ساختاریافته، شیء/آرایه، رایج در REST

  • XML → داده‌ی ساختاریافته مبتنی بر tag

  • x-www-form-urlencoded → جفت‌های key=value برای فرم‌های ساده

  • multipart/form-data → چند بخش جداگانه، مناسب فایل و فرم پیچیده

2) از نظر کاربرد

  • JSON → APIهای مدرن، عملیات Create / Update / Search

  • XML → سیستم‌های قدیمی‌تر، SOAP، بعضی سرویس‌های سازمانی

  • x-www-form-urlencoded → فرم‌های ساده، login / token / auth

  • multipart/form-data → file upload، آپلود تصویر، سند، ضمیمه

3) از نظر تست

  • در JSON/XML بیشتر روی schema, validation, parsing, data type تمرکز می‌کنی

  • در multipart علاوه بر فیلدها باید فایل، سایز، نوع فایل، امنیت فایل را هم تست کنی

  • در x-www-form-urlencoded باید روی encoding، پارامترهای خالی، تکراری، missing تمرکز کنی


خطاهای رایج مرتبط با Content types of body

1) Header و Body با هم سازگار نیستند

مثلاً:

Content-Type: application/json

ولی بدنه XML است.
این می‌تواند باعث 400، 415 یا Parsing Failure شود.


2) API فرمت را پشتیبانی نمی‌کند

مثلاً API فقط JSON قبول می‌کند ولی XML یا multipart می‌فرستی.
اینجا معمولاً 415 Unsupported Media Type مطرح می‌شود.


3) Body از نظر ساختاری خراب است

مثلاً:

  • JSON خراب

  • XML بدفرم

  • multipart ناقص

  • form-urlencoded با encoding خراب

در این حالت معمولاً 400 Bad Request یا خطای validation دیده می‌شود.


4) فایل آپلودی از نظر امنیت یا اعتبار مشکل دارد

در multipart باید این ریسک‌ها را ببینی:

  • فایل بیش از حد بزرگ

  • فرمت فایل ممنوع

  • فایل اسکریپتی / اجرایی

  • نام فایل غیرمجاز

  • MIME type spoofing


اهمیت این سرفصل برای Backend Tester

Backend Tester باید بتواند تشخیص دهد:

  • هر endpoint چه Body Typeای می‌پذیرد

  • چه Content-Typeای باید ست شود

  • اگر Header و Body mismatch باشند چه خطایی منطقی است

  • خطا مربوط به Contract است یا Parser یا Validation یا Business Rule

  • در سناریوهای file upload چه ریسک‌های functional و security وجود دارد

این سرفصل مستقیماً در طراحی API Test Case، Negative Testing، Contract Testing، Security Testing و Bug Analysis استفاده می‌شود.


نکته امتحانی مهم

در پاسخ امتحانی فقط نگویید «JSON برای داده، form-data برای فایل».
پاسخ خوب باید این کلیدواژه‌ها را داشته باشد:

Content-Type، Request Body، Parser، Schema Validation، Malformed Payload، 415 Unsupported Media Type، 400 Bad Request، multipart/form-data، x-www-form-urlencoded، file upload، contract mismatch، server-side validation


نمونه پاسخ کامل کوتاه

در API Testing، نوع Body مشخص می‌کند داده با چه فرمتی به سرور ارسال می‌شود و سرور باید آن را با چه parser و چه validationای پردازش کند. raw JSON معمولاً با Content-Type: application/json برای APIهای REST استفاده می‌شود، XML بیشتر در سرویس‌های قدیمی‌تر یا SOAP دیده می‌شود، x-www-form-urlencoded برای فرم‌های ساده و درخواست‌های login/token کاربرد دارد و multipart/form-data برای ارسال فایل یا ترکیب فایل و داده‌ی متنی استفاده می‌شود. در تست این سرفصل باید سازگاری Header و Body، درستی schema/format، رفتار API در برابر malformed payload و خطاهای 400 و 415 بررسی شود.


کلیدواژه‌ها

Content-Type Request Body Payload Media Type Parser Serialization Deserialization JSON XML form-data multipart/form-data x-www-form-urlencoded Schema Validation Malformed Payload File Upload MIME Type Boundary Encoding 400 Bad Request 415 Unsupported Media Type Contract Mismatch Server-side Validation


Content-Type (هدر مشخص‌کننده‌ی نوع داده‌ی بدنه‌ی Request): برای تعیین فرمت Body مثل application/json یا multipart/form-data استفاده می‌شود.

Request Body (بدنه‌ی درخواست HTTP): داده‌ی اصلی ارسالی از Client به Server که در POST / PUT / PATCH کاربرد دارد.

Payload (محتوای واقعی داده‌ی ارسالی در بدنه‌ی Request): در تست API برای بررسی ساختار، داده و اعتبار ورودی استفاده می‌شود.

Media Type (نوع استاندارد داده در HTTP مثل application/json یا application/xml): در تحلیل Content-Type و Accept و تست Contract استفاده می‌شود.

Parser (ماژول یا منطق خواندن و تبدیل داده‌ی ورودی به ساختار قابل‌فهم برای سیستم): در خطاهای JSON/XML parsing و تحلیل 400 Bad Request کاربرد دارد.

Serialization (تبدیل آبجکت یا داده‌ی داخلی برنامه به فرمت قابل ارسال مثل JSON/XML): در طراحی API و تولید Request/Response استفاده می‌شود.

Deserialization (تبدیل داده‌ی متنی ورودی مثل JSON/XML به آبجکت یا ساختار داخلی سیستم): در سمت Server و هنگام پردازش Request Body کاربرد دارد.

JSON (فرمت متنی سبک و رایج برای تبادل داده در REST API): در بیشتر Web APIها برای Create / Update / Search استفاده می‌شود.

XML (فرمت متنی مبتنی بر tag برای تبادل داده): در SOAP، سیستم‌های قدیمی‌تر و برخی یکپارچه‌سازی‌های سازمانی استفاده می‌شود.

form-data (روش ارسال داده‌ی فرم، معمولاً همراه فایل): در ابزارهایی مثل Postman برای تست file upload و ارسال فیلدهای متنی + فایل استفاده می‌شود.

multipart/form-data (فرمت HTTP چندبخشی برای ارسال فایل و چند بخش مجزا در یک Request): در آپلود فایل، تصویر، سند و فرم‌های پیچیده استفاده می‌شود.

x-www-form-urlencoded (فرمت فرم ساده به‌صورت key=value): در login، token request و فرم‌های بدون فایل استفاده می‌شود.

Schema Validation (بررسی ساختار و قواعد مجاز داده‌ی ورودی یا خروجی): برای JSON/XML، فیلدهای اجباری، نوع داده و ساختار مورد انتظار کاربرد دارد.

Malformed Payload (بدنه‌ی خراب یا بدفرم مثل JSON یا XML ناقص): در Negative Testing و بررسی رفتار API در برابر ورودی خراب استفاده می‌شود.

File Upload (ارسال فایل از طریق Request): در تست multipart/form-data و سناریوهای آپلود تصویر، سند و ضمیمه کاربرد دارد.

MIME Type (شناسه‌ی نوع فایل/داده مثل image/png یا application/pdf): در تست upload، Content-Type و اعتبارسنجی نوع فایل استفاده می‌شود.

Boundary (مرزبندی بین بخش‌های مختلف در multipart/form-data): در سطح HTTP برای جدا کردن partهای مختلف بدنه استفاده می‌شود.

Encoding (نحوه‌ی کدگذاری کاراکترها و داده‌ها): در x-www-form-urlencoded، XML، داده‌های فارسی و کاراکترهای خاص اهمیت دارد.

400 Bad Request (کد خطایی که نشان می‌دهد درخواست از نظر ساختار یا داده نامعتبر است): در malformed JSON/XML، داده‌ی اشتباه یا validation error استفاده می‌شود.

415 Unsupported Media Type (کد خطایی که نشان می‌دهد نوع داده‌ی ارسالی توسط API پشتیبانی نمی‌شود): در تست Content-Type و ناسازگاری Body format با Contract استفاده می‌شود.

Contract Mismatch (عدم تطابق بین رفتار واقعی API و قرارداد تعریف‌شده در مستندات): وقتی API برخلاف Swagger/OpenAPI نوع داده یا رفتار دیگری نشان می‌دهد استفاده می‌شود.

Server-side Validation (اعتبارسنجی داده در سمت سرور): برای جلوگیری از پذیرش Body نامعتبر، فایل غیرمجاز یا دور زدن Client-side validation استفاده می‌شود.


تگ‌ها

#APITesting
#HTTP
#ContentType
#BackendTesting
#Postman

۰
۰
Nastooh
Nastooh
شاید از این پست‌ها خوشتان بیاید