API چیست؟:
API یا Application Programming Interface یک Contract / Interface برای ارتباط بین دو سیستم نرمافزاری است. API مشخص میکند Client چگونه Request ارسال کند، Server چگونه آن را پردازش کند و Response با چه ساختاری برگردد. در Web API این ارتباط معمولاً از طریق HTTP/HTTPS انجام میشود و شامل Endpoint، Method، Headers، Parameters، Body، Status Code و Schema است.
Client چیست؟:
Client مصرفکننده یا API Consumer است؛ یعنی سیستمی که Request را به Server ارسال میکند و Response را دریافت میکند. Client میتواند اپ موبایل، مرورگر، Postman، Swagger UI، اسکریپت تست اتوماتیک یا حتی یک سرویس دیگر باشد. در تست API، وقتی با Postman درخواست ارسال میکنیم، Postman نقش Client دارد.
Server چیست؟:
Server ارائهدهنده یا API Provider است؛ یعنی سیستمی که Request را دریافت میکند، Validation و Business Logic را اجرا میکند، در صورت نیاز با Database، Cache یا سرویسهای دیگر ارتباط میگیرد و در نهایت Response مناسب همراه با Status Code برمیگرداند.
تفاوت Client و Server:
Client آغازکننده ارتباط است و Request ارسال میکند. Server دریافتکننده و پردازشکننده Request است و Response تولید میکند. Client مصرفکننده سرویس و Server ارائهدهنده سرویس است.
API فقط URL نیست:
API فقط آدرس سرویس نیست؛ بلکه یک Contract کامل است که مشخص میکند چه Methodی استفاده میشود، چه Headerهایی لازم است، چه Parameterهایی وجود دارد، Request Body چه ساختاری دارد، چه Responseهایی ممکن است برگردد و Status Codeهای هر سناریو چیست.
Endpoint چیست؟:
Endpoint یا URI آدرس یک Resource در API است. مثلاً در GET /customers/12345، مقدار /customers/12345 Endpoint است و GET نوع عملیات یا HTTP Method است.
Request چیست؟:
Request پیامی است که Client به Server ارسال میکند و میتواند شامل HTTP Method، URL، Headers، Query Parameters، Path Parameters و Request Body باشد. در تست API، Request باید با Contract یا Swagger/OpenAPI مقایسه شود.
Response چیست؟:
Response پاسخی است که Server به Client برمیگرداند و معمولاً شامل Status Code، Headers و Response Body است. در تست API باید بررسی شود که Response با Contract، Business Rule و Expected Result مطابقت داشته باشد.
Status Code چیست؟:
Status Code نتیجه پردازش Request را در سطح HTTP مشخص میکند. کدهای 2xx نشاندهنده موفقیت، 4xx نشاندهنده خطای سمت Client یا Request نامعتبر، و 5xx نشاندهنده خطای سمت Server هستند. برای مثال 201 Created برای ایجاد موفق، 400 Bad Request برای ورودی نامعتبر، 401 Unauthorized برای احراز هویت ناموفق، 403 Forbidden برای عدم مجوز، 404 Not Found برای نبودن Resource و 409 Conflict برای تعارض دادهای استفاده میشود.
اهمیت این سرفصل برای Backend Tester:
Backend Tester باید مفهوم API، Client و Server را دقیق بداند تا بتواند Request و Response را تحلیل کند، Contract را با Swagger/OpenAPI مقایسه کند، Validationها را بررسی کند، روی Status Code و Response Body Assertion بزند و تشخیص دهد Failure از سمت Client Input، API Contract، Server-side Validation، Business Logic، Database، Cache یا Dependency خارجی ایجاد شده است.
نکته امتحانی مهم:
در پاسخ امتحانی فقط نگویید API راه ارتباطی بین دو سیستم است. پاسخ کامل باید شامل کلیدواژههای Contract، Interface، Request، Response، Client، Server، Endpoint، HTTP Method، Status Code، Schema، Validation و Business Logic باشد.
نمونه پاسخ کامل کوتاه:
در سناریوی GET /customers/12345، اپ موبایل یا Postman نقش Client دارد، Customer Service نقش Server دارد و API به عنوان Contract مشخص میکند که Client با Method GET به Endpoint /customers/12345 درخواست ارسال کند و Server پس از اجرای Validation و Business Logic، اطلاعات مشتری را همراه با Status Code مناسب در Response برگرداند.
کلیدواژهها
API Contract
Interface
Client
Server
Consumer
Provider
Endpoint
URI
HTTP Method
Request
Response
Payload
Headers
Query Parameter
Path Parameter
Status Code
Schema
Validation
Business Logic
Authentication
Authorization
Dependency
Database
Cache
Failure
Defect
Error
Root Cause Analysis (RCA)
Contract (توافق بین Client و Server درباره Request و Response): در Swagger، OpenAPI، Contract Testing و تحلیل ناسازگاری سرویسها کاربرد دارد.
Interface (نقطه تعامل و ارتباط بین دو سیستم): برای تعریف API و معماری سیستم استفاده میشود.
Client (مصرفکننده API که Request ارسال میکند): در Postman، Browser، Mobile App و تست API کاربرد دارد.
API Consumer (سیستمی که از API استفاده میکند): برای توضیح نقش Client در معماری سیستم استفاده میشود.
Server (ارائهدهنده API که Request را پردازش میکند): در Backend Service و اجرای Business Logic کاربرد دارد.
API Provider (سیستمی که API را ارائه میدهد): برای توضیح نقش Server در معماری استفاده میشود.
Request (پیام ارسالی از Client به Server): در طراحی و اجرای تست API استفاده میشود.
Response (پیام برگشتی از Server به Client): برای Assertion، Validation و تحلیل خروجی استفاده میشود.
Endpoint (آدرس یک Resource در API): در Swagger، Postman و طراحی تست کاربرد دارد.
URI (شناسه آدرسدهی یک Resource): برای طراحی و تحلیل API استفاده میشود.
HTTP Method (نوع عملیات روی یک Resource): برای طراحی API و انتخاب رفتار مناسب سرویس استفاده میشود.
GET (دریافت اطلاعات): برای استعلام، جستجو و دریافت جزئیات کاربرد دارد.
POST (ایجاد داده جدید): برای ثبت اطلاعات و عملیات Create استفاده میشود.
PUT (جایگزینی کامل داده موجود): برای Update کامل اطلاعات استفاده میشود.
PATCH (ویرایش بخشی از داده موجود): برای Update جزئی اطلاعات کاربرد دارد.
DELETE (حذف داده): برای عملیات حذف اطلاعات استفاده میشود.
Headers (اطلاعات کنترلی Request و Response): برای Authorization، Content-Type، Accept و Correlation-ID استفاده میشود.
Query Parameter (پارامتر ارسالی در URL برای فیلتر یا جستجو): برای Search، Filter و Pagination کاربرد دارد.
Path Parameter (پارامتر قرار گرفته در مسیر URL): برای Get By Id و Get By Code استفاده میشود.
Request Body / Payload (داده ارسالی در بدنه Request): در POST، PUT و PATCH استفاده میشود.
Response Body (داده برگشتی در پاسخ): برای بررسی Schema و Business Data استفاده میشود.
Status Code (نتیجه پردازش Request در سطح HTTP): برای تشخیص Success، Client Error و Server Error استفاده میشود.
Schema (ساختار مورد انتظار Request یا Response): برای Schema Validation و OpenAPI Validation استفاده میشود.
Validation (بررسی صحت و اعتبار دادههای ورودی): در Negative Testing و Input Validation کاربرد دارد.
Business Logic (قوانین و رفتارهای اصلی کسبوکار سیستم): در Functional Testing و تحلیل رفتار سیستم استفاده میشود.
Authentication (احراز هویت کاربر یا سیستم): در Login Testing و Token Validation استفاده میشود.
Authorization (کنترل سطح دسترسی پس از احراز هویت): در Permission Testing و Security Testing کاربرد دارد.
Dependency (سرویس یا مؤلفهای که سیستم به آن وابسته است): در Database، Redis، Kafka، External Service، RCA و System Analysis استفاده میشود.
Contract Mismatch (عدم تطابق رفتار واقعی API با Contract تعریفشده): در تحلیل Defect و API Failure کاربرد دارد.
Server-side Validation (اعتبارسنجی انجامشده در سمت Server): برای جلوگیری از Validation Bypass استفاده میشود.
Failure (رفتار مشاهدهشده که با Expected Result متفاوت است): در Bug Reporting و Test Execution کاربرد دارد.
Defect (نقص موجود در طراحی یا پیادهسازی سیستم): در Root Cause Analysis و Bug Analysis استفاده میشود.
Error (اشتباه انسانی که منجر به ایجاد Defect شده است): در مفاهیم ISTQB و RCA استفاده میشود.
RCA - Root Cause Analysis (تحلیل علت ریشهای ایجاد Failure یا Defect): در Incident Analysis و Problem Solving کاربرد دارد.
Resource (موجودیتی که API روی آن عملیات انجام میدهد): در طراحی REST API استفاده میشود.
REST (سبک معماری مبتنی بر Resource و HTTP): در API Design و API Testing کاربرد دارد.
Consumer-Provider Model (مدل ارتباطی بین مصرفکننده و ارائهدهنده سرویس): در معماری سرویسها و Microservices استفاده میشود.
Assertion (بررسی و تأیید نتیجه مورد انتظار در تست): در API Testing و Automation Testing کاربرد دارد.
Expected Result (نتیجه مورد انتظار بر اساس Requirement یا Test Basis): در طراحی Test Case و ارزیابی Failure استفاده میشود.
Actual Result (نتیجه واقعی مشاهدهشده در زمان اجرا): در تحلیل Failure و Bug Reporting کاربرد دارد.
Test Basis (منبع طراحی تست مانند Requirement، Swagger، User Story یا Design Document): در Test Design و Traceability استفاده میشود.
OpenAPI Specification (استاندارد توصیف و مستندسازی API): در Swagger، Contract Testing و API Documentation کاربرد دارد.
Swagger (ابزار مستندسازی، مشاهده و تست API): در Manual API Testing، Contract Review و Documentation استفاده میشود.