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 را با هم ببینی.
در این حالت، بدنهی درخواست بهصورت JSON خام ارسال میشود و معمولاً Header به این شکل است:
Content-Type: application/json
نمونه:
{ "firstName": "Ali", "lastName": "Ahmadi", "age": 30 }
JSON رایجترین فرمت در REST APIهاست و برای ارسال دادههای ساختاریافته، آبجکتها، آرایهها و مدلهای پیچیده استفاده میشود.
بررسی کن Header = application/json درست ست شده باشد.
بررسی کن Schema و ساختار JSON درست باشد.
نوع دادهها را تست کن: عدد، رشته، بولین، null
فیلد اجباری / اختیاری را تست کن.
Malformed JSON را تست کن؛ مثل براکت جاافتاده، کوتیشن اشتباه، comma اضافی
اگر Content-Type درست باشد ولی JSON خراب باشد، معمولاً 400 Bad Request منطقی است.
اگر Body اصلاً JSON نباشد ولی Content-Type: application/json باشد، باز هم باید رفتار Validation / Parsing بررسی شود.
در این حالت، بدنهی درخواست بهصورت XML ارسال میشود و معمولاً Header این است:
Content-Type: application/xml
نمونه:
<customer> <firstName>Ali</firstName> <lastName>Ahmadi</lastName> <age>30</age> </customer>
XML نسبت به JSON ساختار متنی با tag دارد و در بعضی سیستمهای قدیمی، بانکی، SOAP-محور یا یکپارچهسازیهای سازمانی هنوز زیاد دیده میشود.
بررسی کن 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 معمولاً برای ارسال دادههای فرم بههمراه فایل استفاده میشود و معمولاً Header به این شکل است:
Content-Type: multipart/form-data
در form-data، هر فیلد بهصورت یک part جداگانه ارسال میشود و هر part میتواند متن یا فایل باشد.
مثلاً برای ثبت کاربر همراه با عکس کارت ملی، رزومه، امضا یا فایل ضمیمه از این نوع استفاده میشود.
نمونهی مفهومی:
firstName = Ali
lastName = Ahmadi
avatar = profile.jpg
وجود فیلدهای متنی و فایل را همزمان تست کن.
فرمت فایل، حجم فایل، پسوند فایل و MIME type را تست کن.
سناریوهای فایل خالی، فایل خراب، فایل خیلی بزرگ، پسوند ممنوع را تست کن.
بررسی کن اگر فیلد فایل required است، نبود آن چه خطایی میدهد.
اگر سیستم روی نام فایل یا نوع فایل Validation دارد، حتماً تست منفی طراحی کن.
در تست امنیتی، آپلود فایل مخرب / executable / script هم از جنس ریسکهای مهم است.
این نوع برای ارسال دادههای فرم بدون فایل استفاده میشود و معمولاً Header آن این است:
Content-Type: application/x-www-form-urlencoded
در این حالت دادهها بهصورت key=value و با & به هم متصل میشوند.
نمونه:
username=ali&password=123456&rememberMe=true
این نوع معمولاً در فرمهای login قدیمی، OAuth token request، بعضی gatewayها و برخی سرویسهای سادهتر دیده میشود.
بررسی کن API این نوع Content-Type را میپذیرد یا نه.
Encoding کاراکترها، فاصله، کاراکتر فارسی، +، % و کاراکترهای special را تست کن.
سناریوهای پارامتر تکراری، پارامتر خالی، پارامتر جاافتاده را تست کن.
اگر Body باید form-urlencoded باشد ولی JSON بفرستی، باید رفتار API را از نظر Contract بررسی کنی.
برای endpointهایی مثل login یا token generation، این نوع خیلی مهم است.
multipart/form-data در واقع همان فرمت استاندارد form-data برای ارسال چند بخش مجزا در بدنه است.
یعنی وقتی در ابزارهایی مثل Postman نوع form-data را انتخاب میکنی، در سطح HTTP معمولاً Content-Type واقعی میشود:
Content-Type: multipart/form-data; boundary=...
پس از نظر مفهومی:
form-data = مدل کاری در ابزار تست
multipart/form-data = فرمت HTTP واقعی که Request با آن ارسال میشود
آپلود فایل
ارسال همزمان فایل + داده متنی
فرمهای پیچیده با چند فیلد و چند ضمیمه
اگر در سؤال از form-data و multipart جداگانه نام برده شد، بهتر است بگویی:
form-data در عمل معمولاً با multipart/form-data روی HTTP ارسال میشود.
تفاوتش با x-www-form-urlencoded این است که multipart برای فایل و بخشهای مجزا مناسب است، ولی x-www-form-urlencoded برای فیلدهای متنی ساده و بدون فایل.
JSON → دادهی ساختاریافته، شیء/آرایه، رایج در REST
XML → دادهی ساختاریافته مبتنی بر tag
x-www-form-urlencoded → جفتهای key=value برای فرمهای ساده
multipart/form-data → چند بخش جداگانه، مناسب فایل و فرم پیچیده
JSON → APIهای مدرن، عملیات Create / Update / Search
XML → سیستمهای قدیمیتر، SOAP، بعضی سرویسهای سازمانی
x-www-form-urlencoded → فرمهای ساده، login / token / auth
multipart/form-data → file upload، آپلود تصویر، سند، ضمیمه
در JSON/XML بیشتر روی schema, validation, parsing, data type تمرکز میکنی
در multipart علاوه بر فیلدها باید فایل، سایز، نوع فایل، امنیت فایل را هم تست کنی
در x-www-form-urlencoded باید روی encoding، پارامترهای خالی، تکراری، missing تمرکز کنی
مثلاً:
Content-Type: application/json
ولی بدنه XML است.
این میتواند باعث 400، 415 یا Parsing Failure شود.
مثلاً API فقط JSON قبول میکند ولی XML یا multipart میفرستی.
اینجا معمولاً 415 Unsupported Media Type مطرح میشود.
مثلاً:
JSON خراب
XML بدفرم
multipart ناقص
form-urlencoded با encoding خراب
در این حالت معمولاً 400 Bad Request یا خطای validation دیده میشود.
در multipart باید این ریسکها را ببینی:
فایل بیش از حد بزرگ
فرمت فایل ممنوع
فایل اسکریپتی / اجرایی
نام فایل غیرمجاز
MIME type spoofing
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