तुमच्या APIs समोरचे मुख्य दार, शाळेच्या front office च्या रूपात शिकवलेले: ते badges तपासते, visitors मोजते, उत्तरे सूचना फलकावर लावते आणि प्रत्येकाला योग्य kitchen कडे पाठवते. प्रत्येक धडा म्हणजे चित्र आणि lab असलेली एक शाळेची गोष्ट — आणि front office repo मध्येच आहे: शुद्ध Python मधील local gateway (apigw/gateway.py, कोणतीही dependency नाही) ज्यात routes, JWT authorizer, token bucket, cache, CORS आणि access logs आहेत — code मधून किंवा localhost:8080 वर वापरता येतो.
🧰 REST · HTTP · WebSocket🗺️ routes आणि {proxy+}📝 validation🎭 stages🔐 JWT आणि Lambda authorizers🚦 token bucket📌 cache TTL🌐 CORS📈 Latency विरुद्ध IntegrationLatency
🛎️ भाग 1 — FRONT OFFICE (1–6)
एकच front office का 🛎️
office चे तीन प्रकार 🧰
कोणता desk, कोणते kitchen 🗺️📝
रंगीत तालीम आणि badges 🎭🔐
🚦 भाग 2 — PRODUCTION मध्ये चालवणे (7–12)
दारावरचा token bucket 🚦
सूचना फलक 📌
आधी विचारणारे browsers 🌐
नावे, आकडे आणि कठोर मर्यादा 🏷️📈🛡️
# the 60-second wow — the front office, live:
git clone https://github.com/BaluRaut/learn-apigateway-school.git && cd learn-apigateway-school
python3 apigw/demo.py # 12 lessons: every request and its answer
python3 apigw/test_apigw.py # 12 checks across the lessons
python3 apigw/demo.py serve # then: curl -i localhost:8080/students/7
तुम्हाला काय दिसायला हवे (छाटलेले — यश असे दिसते):
═══ why ═══
── one front office for every visitor: it checks, counts, remembers and forwards — the kitchen only cooks
GET /students/7 → 200 {'id': '7', 'name': 'Aishwarya', 'class': '8B'} X-Cache: Miss
GET /teachers → 404 {'message': 'Not Found'}
without it, every service rebuilds auth, limits, logging and TLS on its own
═══ kinds ═══
── three kinds of API Gateway
REST API the full kit: API keys + usage plans, caching, request validation, mapping templates, WAF, private
HTTP API lean and cheaper: JWT authorizers built in, CORS in one setting, Lambda + HTTP proxy
WebSocket API a phone line that stays open: $connect, $disconnect, routes by a field in the message
this lab models a REST API because it shows the most parts
═══ routes ═══
── the most specific route wins: a fixed word beats {id}, {proxy+} catches everything else
GET /students/9 → 200 {'id': '9', 'name': 'Katrina', 'class': '9A'} X-Cache: Miss
GET /students/me → 200 {'you': 'teacher-42'}
GET /files/term1/maths/paper.pdf → 200 {'file': 'term1/maths/paper.pdf'}
DELETE /students/9 → 405 {'message': 'Method Not Allowed'}
integration = where the office forwards the visitor: Lambda, an HTTP backend, an AWS service, or a mock
═══ validate ═══
── the office rejects a bad form BEFORE the kitchen sees it (the backend is not called, not billed)
POST /marks → 400 {'message': 'Invalid request body', 'why': "missing required field 'mark'"}
POST /marks → 400 {'message': 'Invalid request body', 'why': "'mark' must be int"}
POST /marks → 201 {'saved': {'student': '7', 'subject': 'maths', 'mark': 91}, 'table': 'marks-prod'}
── response mapping: the kitchen returns the phone number, the office removes it on the way out
kitchen: {'id': '7', 'name': 'Aishwarya', 'class': '8B', 'phone': '98xxxxxx12'}
GET /students/7 → 200 {'id': '7', 'name': 'Aishwarya', 'class': '8B'} X-Cache: Miss
═══ stages ═══
── one API, many stages — each a snapshot (deployment) with its own variables, limits and cache
stage dev → 201 {'saved': {'student': '7', 'subject': 'maths', 'mark': 91}, 'table': 'marks-dev'}
stage prod → 201 {'saved': {'student': '7', 'subject': 'maths', 'mark': 91}, 'table': 'marks-prod'}
stage test → 403 {'message': 'Forbidden'}
a change is live only after a new deployment to a stage · canary: send 10% of prod to the new deployment
═══ auth ═══
── who are you? JWT authorizer (Cognito or any OIDC issuer) — checks signature, issuer, audience, expiry
no token GET /students/me → 401 {'message': 'Unauthorized', 'why': 'no token'}
forged GET /students/me → 401 {'message': 'Unauthorized', 'why': 'bad signature'}
expired GET /students/me → 401 {'message': 'Unauthorized', 'why': 'expired'}
other app's token GET /students/me → 401 {'message': 'Unauthorized', 'why': 'wrong audience'}
good GET /students/me → 200 {'you': 'teacher-42'}
── scope check: a read-only token may not write marks
POST /marks → 403 {'message': 'Forbidden', 'why': 'needs scope marks:write'}
── Lambda authorizer: your own code decides (here: a staff badge)
GET /staffroom → 403 {'message': 'User is not authorized to access this resource'}
GET /staffroom → 200 {'you': 'teacher-42'}
IAM auth (SigV4) for callers inside AWS · API keys are NOT auth — they say which client, not who, and leak easily
═══ throttle ═══
── token bucket: holds `burst` tokens, refills `rate`/s — defaults 10,000 rps and 5,000 burst per account & Region
stage dev: rate 5/s, burst 5 — 8 requests in the same instant:
200 200 200 200 200 429 429 429
one second later: 200 200 200 200 200 429
── usage plan 'partner-basic' (2 rps, burst 2) on the partner route, identified by x-api-key:
200 200 429 429 · unknown key → 403
429 means slow down and retry with backoff — it is the office protecting the kitchen
═══ cache ═══
── the notice board: stage cache TTL 300 s (default; 0–3600) — the kitchen is asked once
+0 s 200 Miss kitchen calls so far: 1
+10 s 200 Hit kitchen calls so far: 1
+200 s 200 Hit kitchen calls so far: 1
+301 s 200 Miss kitchen calls so far: 2
the cache key is method + path (+ chosen headers / query strings) — never cache per-user answers under a shared key
═══ cors ═══
── a browser page on another site asks first (OPTIONS preflight); the office answers with Allow-* headers
OPTIONS /students/7 → 204 Access-Control-Allow-Origin: https://school.example Access-Control-Allow-Methods: GET,POST,PUT,DELETE Access-Control-Allow-Headers: authorization,content-type,x-api-key Access-Control-Max-Age: 600
OPTIONS /students/7 → 403 {'message': 'CORS origin not allowed'}
GET /students/7 → 200 {'id': '7', 'name': 'Aishwarya', 'class': '8B'} X-Cache: Miss Access-Control-Allow-Origin: https://school.example
CORS is enforced by BROWSERS — curl ignores it. It is not security for your API, it protects users' browsers
═══ domains ═══
── custom domain: api.school.example instead of abc123.execute-api.ap-south-1.amazonaws.com
certificate ACM — in us-east-1 for edge-optimized, in the API's Region for regional
DNS Route 53 alias (A/AAAA) → the gateway's domain name
base path mapping api.school.example/v1 → school-api prod · /v2 → school-api-v2 prod
TLS security policy TLS 1.2 minimum · mutual TLS for partners with client certificates
endpoint types edge-optimized (CloudFront in front) · regional · private (inside a VPC)
═══ monitor ═══
── CloudWatch metrics the office keeps:
Count=6 · 4XXError=2 · 5XXError=2 · CacheHitCount=1 · CacheMissCount=2
── access log (one JSON line per request — you choose the fields):
{'requestId': 'req-0001', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/students/7', 'status': 200, 'principal': None, 'latencyMs': 42, 'integrationLatencyMs': 38}
{'requestId': 'req-0002', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/students/7', 'status': 200, 'principal': None, 'latencyMs': 4, 'integrationLatencyMs': 0}
{'requestId': 'req-0003', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/students/404', 'status': 404, 'principal': None, 'latencyMs': 42, 'integrationLatencyMs': 38}
{'requestId': 'req-0004', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/broken', 'status': 502, 'principal': None, 'latencyMs': 4, 'integrationLatencyMs': 0}
{'requestId': 'req-0005', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/report', 'status': 504, 'principal': None, 'latencyMs': 29004, 'integrationLatencyMs': 29000}
{'requestId': 'req-0006', 'stage': 'prod', 'httpMethod': 'GET', 'path': '/teachers', 'status': 404, 'principal': None, 'latencyMs': 4, 'integrationLatencyMs': 0}
Latency = whole trip; IntegrationLatency = the kitchen only; the gap is the office itself · X-Ray draws the path
═══ limits ═══
── hard edges: integration timeout 29 s (REST default), payload 10 MB
GET /report → 504 {'message': 'Endpoint request timed out'}
GET /broken → 502 {'message': 'Internal server error'}
long jobs: accept → 202 + job id → poll or WebSocket/push · big files: pre-signed S3 URL, not through the API
── private API: reachable only through an interface VPC endpoint (execute-api) + a resource policy
── AWS WAF in front of REST APIs: SQL-injection rules, IP sets, rate-based rules
── cost (example, us-east-1): REST ~$3.50 per million requests, HTTP ~$1.00 per million — plus cache hours and data out
✅ done — the front office answered every lesson
🎒 धडा 01 पूर्वी: तुम्हाला फक्त Python 3 हवे — दुसरे काहीही नाही; AWS account नको, framework नको. हा lab API Gateway मधील REST API चे शिकवण्यासाठीचे मॉडेल आहे; त्याची JWT तपासणी HS256 वापरते म्हणून crypto library लागत नाही (खरे Cognito/OIDC tokens RS256 असतात, issuer च्या keys वापरून तपासले जातात). चांगले शेजारी: API शाळा (office मागचा API design करणे), IAM शाळा (SigV4 आणि roles) आणि VPC शाळा (private APIs आणि endpoints).
एक git branch = एक कल्पना; branch 04 मध्ये धडे 01–04 आहेत. प्रत्येक उत्तर apigw/gateway.py मधून येते — AWS account लागत नाही.
1
🛎️ API gateway का
शाळेचे front office — प्रत्येक visitor तपासला जातो, मोजला जातो, लक्षात ठेवला जातो आणि पुढे पाठवला जातो; kitchen फक्त स्वयंपाक करते.lesson-01-why-gatewayधडा वाचा →आकृती पहा ↗
2
🧰 REST विरुद्ध HTTP विरुद्ध WebSocket APIs
front office चे तीन प्रकार — संपूर्ण संच, हलका आणि स्वस्त, आणि सतत चालू राहणारी फोन लाइन.lesson-02-rest-http-websocketधडा वाचा →आकृती पहा ↗
3
🗺️ Routes आणि integrations
कोणता desk कोणत्या visitor ला घेतो — path params, {proxy+}, सर्वात नेमका route जिंकतो, आणि office कुठे पुढे पाठवते.lesson-03-routes-integrationsधडा वाचा →आकृती पहा ↗
4
📝 Validation आणि mapping
kitchen ला दिसण्याआधीच चुकीचा अर्ज नाकारा, आणि बाहेर जाताना उत्तराचा आकार बदला.lesson-04-mapping-validationधडा वाचा →आकृती पहा ↗
5
🎭 Stages आणि deployments
रंगीत तालीम आणि खरा प्रयोग — snapshots, stage variables, आणि deploy करेपर्यंत काहीही live नसते.lesson-05-stages-deploymentsधडा वाचा →आकृती पहा ↗
6
🔐 आत कोण येऊ शकतो
IAM, JWT (Cognito किंवा कोणताही OIDC issuer) आणि Lambda authorizers — आणि API key म्हणजे authentication का नाही.lesson-06-authधडा वाचा →आकृती पहा ↗
🚦 भाग 2 — production मध्ये चालवणे (धडे 7–12)
खऱ्या API ला त्याच्या gateway कडून काय हवे: मर्यादा, caching, CORS, स्वतःचे domain, monitoring आणि कठोर मर्यादांची माहिती.
7
🚦 Throttling आणि usage plans
दारावरचा token bucket — प्रत्येक stage साठी, प्रत्येक client साठी rate आणि burst, आणि दैनिक quota; 429 म्हणजे सावकाश.lesson-07-throttlingधडा वाचा →आकृती पहा ↗
8
📌 Caching
सूचना फलक — TTL संपेपर्यंत kitchen ला न विचारता त्याच प्रश्नाचे उत्तर द्या.lesson-08-cachingधडा वाचा →आकृती पहा ↗
9
🌐 CORS
browser आधी परवानगी विचारतो — preflight, Allow-* headers, आणि CORS browsers चे संरक्षण करते, तुमच्या API चे नाही हे का.lesson-09-corsधडा वाचा →आकृती पहा ↗
10
🏷️ Custom domains आणि TLS
कोणत्याही यादृच्छिक नावाऐवजी api.school.example — certificates, base paths, endpoint types आणि mutual TLS.lesson-10-custom-domainsधडा वाचा →आकृती पहा ↗
11
📈 Monitoring
Count, 4XXError, 5XXError, Latency विरुद्ध IntegrationLatency, access logs आणि X-Ray — वेळ आणि errors कुठून येतात.lesson-11-monitoringधडा वाचा →आकृती पहा ↗
12
🛡️ Private APIs, WAF, मर्यादा आणि खर्च
कठोर मर्यादा — 29-second timeout, 10 MB payloads, private APIs, WAF rules आणि bill.lesson-12-private-waf-limitsधडा वाचा →आकृती पहा ↗
🗣️ हे मोठ्याने समजावून सांगा — धडा 12 नंतर: (1) /students/me हा /students/{id} वर का जिंकतो? (2) JWT authorizer कोणत्या चार गोष्टी तपासतो, आणि प्रत्येक अपयशावर कोणता status परत येतो? (3) API key म्हणजे authentication का नाही? (4) burst 5 असलेल्या stage वर एकाच वेळी आठ requests येतात — काय होते आणि का? (5) Latency 420 ms आणि IntegrationLatency 400 ms आहे — वेळ कुठे जात आहे? (6) एका report ला 45 seconds लागतात — तुम्ही काय बदलाल?
🎓 त्याच शाळेतून:API · IAM · VPC · NAT · AWS — तेच उपमांचे विश्व, तीच branch-by-branch पद्धत.
📐 धड्यांच्या आकृत्या — क्रमांक अनुसरा
प्रत्येक धडा एका क्रमांकित बॉक्स-आणि-बाण आकृतीत — स्वतंत्र पानावरही.
1 🛎️ API gateway का
शाळेचे front office — प्रत्येक visitor तपासला जातो, मोजला जातो, लक्षात ठेवला जातो आणि पुढे पाठवला जातो; kitchen फक्त स्वयंपाक करते.
🧒 सोप्या शब्दांत
शाळेत येणारे पाहुणे थेट kitchen मध्ये जात नाहीत. ते आधी front office मध्ये थांबतात. Office ते कोण आहेत ते तपासते, त्यांना मोजते, नेहमीची उत्तरे लक्षात ठेवते आणि प्रत्येकाला योग्य खोलीत पाठवते. Kitchen फक्त स्वयंपाक करते. तुमच्या APIs साठी API Gateway हेच front office आहे.
📖 नवे शब्दAPI Gateway — तुमच्या services समोर उभे राहून प्रत्येक request आधी हाताळणारे AWS चे front officerequest — program पाठवतो तो एक प्रश्न, जसे GET /students/7backend — office मागचे kitchen जे खरे काम करते, जसे Lambda functionstatus code — प्रत्येक उत्तरातला आकडा: 200 म्हणजे ठीक, 404 म्हणजे सापडले नाही404 — कोणताही desk path शी जुळला नाही तेव्हाचे office चे उत्तर, जसे /teachers
⏪ आधी
प्रत्येक kitchen स्वतःच badges तपासत, visitors मोजत आणि स्वतःचे logs लिहीत असे, आणि प्रत्येकाची पद्धत थोडी वेगळी होती.
💡 काय
API Gateway म्हणजे शाळेचे front office: ते प्रत्येक visitor ला तपासते, मोजते, लक्षात ठेवते आणि पुढे पाठवते; kitchen फक्त स्वयंपाक करते.
⚙️ कसे
GET /students/7 ला Aishwarya, class 8B सह 200 मिळतो; GET /teachers ला office कडूनच 404 Not Found, कोणत्याही kitchen ला न विचारता.
🎯 का
Auth, limits, logging आणि TLS एकाच जागी राहतात, त्यामुळे प्रत्येक kitchen लहान राहते आणि प्रत्येक दार तेच नियम पाळते.
🚀 पुढे
पुढचा धडा तीन प्रकारची front offices दाखवतो: REST (पूर्ण साहित्य), HTTP (हलके आणि स्वस्त) आणि WebSocket (उघडी राहणारी line).
🧪 इथे करून पाहा — एका visitor ला front office मधून पाठवा — तो ज्या ज्या desk वरून जातो ते पाहा (दोनदा पाठवा: दुसरा GET फलकावरून वाचला जातो)
front office चे तीन प्रकार — संपूर्ण संच, हलका आणि स्वस्त, आणि सतत चालू राहणारी फोन लाइन.
🧒 सोप्या शब्दांत
मोठ्या शाळेत सगळी साधने असलेले पूर्ण office असते: शिक्के, files, सूचना फलक आणि पहारेकरी. लहान शाळेत मूलभूत काम करणारा हलका desk असतो, ज्याचा खर्च कमी असतो. काही पाहुण्यांना चालूच राहणारी phone line हवी असते, म्हणजे दोन्ही बाजू कधीही बोलू शकतात. API Gateway तिन्ही देते: REST, HTTP आणि WebSocket.
📖 नवे शब्दREST API — पूर्ण साहित्याचे office: API keys, usage plans, caching, validation, WAF आणि private APIsHTTP API — JWT आणि CORS आधीच असलेले हलके, स्वस्त officeWebSocket API — उघडी राहणारी line, त्यामुळे server सुद्धा आधी बोलू शकतो$connect — caller line वर पहिल्यांदा येतो तेव्हा चालणारा WebSocket route
⏪ आधी
प्रत्येक कामासाठी एकच प्रकारचे office म्हणजे service फक्त Lambda कडे पाठवत असली तरी पूर्ण साहित्याचे पैसे भरणे.
💡 काय
API Gateway ची तीन offices: सगळी साधने असलेले REST, हलके आणि स्वस्त HTTP, आणि WebSocket, म्हणजे चालूच राहणारी phone line.
⚙️ कसे
REST देते API keys, usage plans, caching आणि WAF; HTTP मध्ये JWT आणि CORS आधीच असतात; WebSocket $connect आणि $disconnect वर route करते.
🎯 का
योग्य प्रकार निवडला की पैसे वाचतात: त्याच forwarding साठी HTTP API ला ~$1.00 प्रति million requests, REST ला ~$3.50.
🚀 पुढे
पुढचा धडा office ला desks देतो: /students/{id}, {proxy+} सारखे routes, आणि प्रत्येक visitor कुठे पाठवायचा ते.
🧪 इथे करून पाहा — तुम्हाला काय हवे ते tick करा — कोणते front office जुळते, आणि एका महिन्याचा खर्च किती?
कोणता desk कोणत्या visitor ला घेतो — path params, {proxy+}, सर्वात नेमका route जिंकतो, आणि office कुठे पुढे पाठवते.
🧒 सोप्या शब्दांत
Office मध्ये अनेक desks असतात, प्रत्येकावर पाटी: students, files, marks. 'माझी स्वतःची नोंद' मागणारा पाहुणा विद्यार्थी क्रमांकांच्या desk कडे नाही, खास 'me' desk कडे जातो. 'files मधले बाकी सगळे' असे लिहिलेला desk कोणताही folder path घेतो. पाटी आहे पण तिथे परवानगी नसलेले काम मागितले, जसे delete, तर clerk 405 ने नाही म्हणतो.
📖 नवे शब्दroute — एक desk: एक method अधिक एक path, जसे GET /students/{id}path parameter — path मधली रिकामी जागा, जसे {id}, जी visitor भरतो, उदा. 7{proxy+} — path चा उरलेला सगळा भाग घेणारी रिकामी जागा, जसे term1/maths/paper.pdfintegration — office visitor ला कुठे पाठवते ते: Lambda, HTTP backend, AWS service किंवा mock405 — path आहे, पण त्या method साठी नाही
⏪ आधी
Routes शिवाय एकच handler प्रत्येक URL हाताने वाचत असे, आणि /students/me ला 'me' नावाचा विद्यार्थी समजले जाऊ शकत असे.
💡 काय
Route म्हणजे desk: method अधिक path. सर्वात नेमका desk जिंकतो, आणि integration सांगते visitor कोणत्या kitchen कडे जाईल.
⚙️ कसे
/students/me हा /students/{id} वर जिंकतो, /files/{proxy+} term1/maths/paper.pdf पकडतो, आणि DELETE /students/9 ला 405 मिळतो.
🎯 का
स्पष्ट desks म्हणजे स्पष्ट उत्तरे: कोणताही path जुळला नाही तर 404, path आहे पण ती method नाही तर 405.
🚀 पुढे
पुढचा धडा office ला counter वरच forms तपासायला लावतो, आणि बाहेर जाणाऱ्या उत्तरातून खाजगी fields काढायला लावतो.
🧪 इथे करून पाहा — एक method आणि एक path लिहा — कोणता route जिंकतो, आणि params मध्ये काय येते?
kitchen ला दिसण्याआधीच चुकीचा अर्ज नाकारा, आणि बाहेर जाताना उत्तराचा आकार बदला.
🧒 सोप्या शब्दांत
Counter वर clerk तुमचा form kitchen कडे जाण्याआधी वाचतो. Mark चा रकाना रिकामा असेल किंवा आकड्याऐवजी शब्द असतील, तर form लगेच तुमच्याकडे परत येतो. बाहेर जाताना clerk उत्तर देण्याआधी विद्यार्थ्याचा phone number सारख्या खाजगी गोष्टी झाकतो.
📖 नवे शब्दvalidation — backend ला दिसण्याआधी request नियमांनुसार तपासणेschema — form चे नियम: कोणते fields आवश्यक आहेत आणि प्रत्येकाचा type काय400 — Bad Request: form चुकीचा होता, जसे 'mark' नसणेmapping template — request किंवा response नव्याने मांडणारी कृती, जसे phone field काढणे
⏪ आधी
चुकीचे forms थेट kitchen कडे जात, ते जागे होऊन राहिलेल्या field मुळे अपयशी ठरत असे, आणि तरीही त्या call चे bill लागत असे.
💡 काय
Validation चुकीचा form counter वरच नाकारते; mapping बाहेर जाणारे उत्तर नव्याने मांडते, जसे phone number काढून टाकणे.
⚙️ कसे
'mark' नसलेल्या POST /marks ला kitchen ला न विचारताच 400; kitchen phone 98xxxxxx12 परत देते आणि office तो काढून टाकते.
🎯 का
Kitchen ला फक्त स्वच्छ input दिसतो, खाजगी fields चुकून बाहेर जात नाहीत, आणि नाकारलेल्या calls चा त्याला काहीच खर्च नाही.
🚀 पुढे
पुढचा धडा खऱ्या प्रयोगाआधी तालीम करतो: dev आणि prod stages, stage variables, आणि snapshot deploy करणे.
🧪 इथे करून पाहा — POST /marks चा अर्ज भरा आणि जमा करा — मग phone लपवणारे mapping बंद-चालू करून पाहा
रंगीत तालीम आणि खरा प्रयोग — snapshots, stage variables, आणि deploy करेपर्यंत काहीही live नसते.
🧒 सोप्या शब्दांत
वार्षिक दिवसाआधी वर्ग सरावाच्या stage वर तालीम करतो, मग खऱ्या stage वर प्रयोग करतो. प्रेक्षकांना काय दिसेल ते शिक्षक 'ही आवृत्ती अंतिम' म्हणतात तेव्हाच ठरते. सरावाचा stage marks सरावाच्या वहीत लिहितो, खरा stage खऱ्या वहीत. कधीच तयार न केलेला stage तुम्हाला परत पाठवतो.
📖 नवे शब्दstage — API ची नाव असलेली प्रत, जसे dev किंवा prod, स्वतःच्या settings सहdeployment — API चा snapshot; deploy केल्यानंतरच बदल live होतातstage variable — प्रत्येक stage साठी वेगळी असणारी value, जसे table marks-dev किंवा marks-prodcanary — आधी थोडा भाग, जसे prod चे 10%, नव्या deployment कडे पाठवणे
⏪ आधी
बदल थेट चालू API वर जात, त्यामुळे एखादा test बदल सगळ्यांसमोर खऱ्या marks table मध्ये लिहू शकत असे.
💡 काय
Stage म्हणजे नाव असलेला प्रयोग, जसे dev किंवा prod; deployment म्हणजे snapshot, आणि deploy केल्याशिवाय काहीच live होत नाही.
⚙️ कसे
तोच POST /marks stage dev वर marks-dev मध्ये आणि prod वर marks-prod मध्ये लिहितो; stage test कधी deploy झालाच नाही, म्हणून 403.
🎯 का
Dev वर सुरक्षित तालीम होते, प्रत्येक stage चे स्वतःचे variables, limits आणि cache असतात, आणि canary prod चे 10% नव्या code कडे पाठवतो.
🚀 पुढे
पुढचा धडा विचारतो आत कोण येऊ शकतो: JWT, IAM आणि Lambda authorizers, आणि API key म्हणजे authentication का नाही.
🧪 इथे करून पाहा — बदला, deploy करा, आणि पाठवा — stage वर deploy करेपर्यंत त्यावर काहीही live नसते
IAM, JWT (Cognito किंवा कोणताही OIDC issuer) आणि Lambda authorizers — आणि API key म्हणजे authentication का नाही.
🧒 सोप्या शब्दांत
दारावर पाहुणा badge दाखवतो. पहारेकरी तपासतो की तो खरा आहे, मुदत संपलेली नाही, आणि दुसऱ्या शाळेसाठी नाही तर याच शाळेसाठी बनवलेला आहे. योग्य badge ने आत जाता येते; विद्यार्थ्याच्या badge ने marks च्या वहीत लिहिता येत नाही. पाहुण्याचा pass number फक्त तुम्ही कोणत्या गटासोबत आलात ते सांगतो, तुम्ही कोण ते नाही, म्हणून तो कशाचाच पुरावा नाही.
📖 नवे शब्दauthorizer — backend चालण्याआधी caller ला तपासणारा counter वरचा पहारेकरीJWT — Cognito किंवा दुसऱ्या OIDC issuer ने सही केलेला badge, issuer, audience, expiry आणि scope सह401 — Unauthorized: badge नाही, किंवा बनावट, expired किंवा दुसऱ्या app चा badge403 — Forbidden: तुम्ही कोण ते माहीत आहे, पण तुम्हाला हे करता येत नाहीLambda authorizer — निर्णय घेणारा तुमचा स्वतःचा code, जसे badge-T-42 स्वीकारणेAPI key — कोणता client call करतोय ते सांगणारे लेबल; कोण आहे याचा पुरावा नाही
⏪ आधी
प्रत्येक kitchen स्वतःच tokens वाचत असे, काही expiry तपासायला विसरत, आणि काही API key ने तुम्ही कोण आहात हे सिद्ध होते असे मानत.
💡 काय
Authorizer counter वरच visitor चा badge तपासतो: JWT, IAM SigV4, किंवा तुमचा स्वतःचा Lambda code. API keys म्हणजे auth नाही.
⚙️ कसे
Token नाही, बनावट, expired किंवा चुकीचा audience: 401; योग्य JWT: 200; read-only scope ने marks लिहिले: 403; badge-T-42: 200.
🎯 का
एकच तपासलेली check प्रत्येक route चे रक्षण करते, आणि 401 की 403 हे caller ला सांगते: login करा, की जास्त अधिकार मागा.
🚀 पुढे
पुढचा धडा दारावर token bucket ठेवतो: प्रत्येक stage साठी rate आणि burst, प्रत्येक client साठी usage plans, आणि 429.
🧪 इथे करून पाहा — badge बनवा, दार निवडा, पाठवा — authorizer आपल्या तपासण्या क्रमाने चालवतो
दारावरचा token bucket — प्रत्येक stage साठी, प्रत्येक client साठी rate आणि burst, आणि दैनिक quota; 429 म्हणजे सावकाश.
🧒 सोप्या शब्दांत
Canteen च्या दारावर tokens ची बरणी असते. प्रत्येक पाहुणा आत जाण्यासाठी एक token घेतो, आणि बरणी दर सेकंदाला काही tokens ने भरते. आठ मुले एकदम आली आणि बरणीत पाचच असतील, तर तिघांना 'थांबा आणि पुन्हा प्रयत्न करा' सांगितले जाते. भागीदार शाळेला स्वतःची लहान बरणी मिळते, म्हणून ती मोठी बरणी रिकामी करू शकत नाही.
📖 नवे शब्दthrottling — callers किती वेगाने requests पाठवू शकतात यावर मर्यादाrate — bucket दर सेकंदाला किती tokens भरतो, जसे 5burst — अचानक गर्दीसाठी bucket किती tokens धरू शकतो, जसे 5429 — Too Many Requests: वेग कमी करा आणि थोड्या वेळाने पुन्हा प्रयत्न कराusage plan — x-api-key header वरून ओळखली जाणारी प्रत्येक client ची मर्यादा आणि रोजचा quota
⏪ आधी
URL माहीत असलेला कोणीही हवे तितक्या वेगाने call करू शकत असे, आणि एका गोंगाटी client मुळे सगळ्यांसाठी kitchen भरून जात असे.
💡 काय
दारावरचा token bucket burst इतके tokens धरतो आणि दर सेकंदाला rate इतके भरतो; token उरला नाही की उत्तर 429.
⚙️ कसे
Stage dev: rate 5, burst 5; एकदम आठ requests ला 200 x5 मग 429 x3; partner-basic ला 200 200 429 429, अनोळखी key ला 403.
🎯 का
गर्दीतही kitchen सुरक्षित राहते, आणि account च्या 10,000 rps default ऐवजी प्रत्येक partner ला स्वतःचा योग्य वाटा मिळतो.
🚀 पुढे
पुढचा धडा उत्तरे सूचना फलकावर लावतो: stage cache, त्याचा TTL, आणि Hit व Miss म्हणजे काय.
🧪 इथे करून पाहा — token bucket वर requests सोडा — rate, burst आणि घड्याळ सेट करा
सूचना फलक — TTL संपेपर्यंत kitchen ला न विचारता त्याच प्रश्नाचे उत्तर द्या.
🧒 सोप्या शब्दांत
अनेक मुले office ला विचारतात 'Aishwarya चा वर्ग कोणता?'. पहिल्यांदा clerk kitchen ला विचारतो आणि उत्तर सूचना फलकावर लावतो. पुढची पाच मिनिटे सगळे फलक वाचतात, आणि kitchen ला त्रास होत नाही. वेळ संपला की चिठ्ठी काढली जाते आणि पुढचा प्रश्न पुन्हा kitchen कडे जातो.
📖 नवे शब्दcache — office अलीकडची उत्तरे ठेवते तो सूचना फलकTTL — उत्तर फलकावर किती वेळ राहते ते, जसे 300 secondsHit — उत्तर फलकावरून आले; kitchen ला विचारले नाहीMiss — फलकावर ताजे काही नव्हते, म्हणून kitchen ला विचारलेcache key — दोन प्रश्न 'सारखे' कशाने ठरतात: method, path आणि निवडलेले headers
⏪ आधी
प्रत्येक सारखा प्रश्न kitchen आणि database कडे जात असे, उत्तर कितीतरी मिनिटे बदलले नसले तरी.
💡 काय
Cache म्हणजे सूचना फलक: office उत्तर फलकावर लावते आणि TTL संपेपर्यंत kitchen ला न विचारता तेच उत्तर देते.
⚙️ कसे
TTL 300 s: +0 s Miss, +10 s Hit, +200 s Hit, +301 s Miss; 4 requests साठी kitchen ला फक्त 2 वेळा विचारले.
🎯 का
Kitchen कडे कमी calls आणि जलद उत्तरे; फक्त प्रत्येक user ची वेगळी उत्तरे सगळ्यांच्या एकाच key खाली कधीच cache करू नका.
🚀 पुढे
पुढचा धडा आधी विचारणारा browser दाखवतो: OPTIONS preflight आणि CORS चे Allow-* headers.
🧪 इथे करून पाहा — विचारा, घड्याळ पुढे करा, पुन्हा विचारा — सूचना फलक आणि kitchen चा counter पाहा
browser आधी परवानगी विचारतो — preflight, Allow-* headers, आणि CORS browsers चे संरक्षण करते, तुमच्या API चे नाही हे का.
🧒 सोप्या शब्दांत
दुसऱ्या site वरचे web page शाळेच्या office शी बोलू इच्छिते. खरा प्रश्न पाठवण्याआधी browser आधी विचारतो: 'या site ला परवानगी आहे का?'. Office शाळेच्या स्वतःच्या site ला हो आणि अनोळखी site ला नाही म्हणते. Browser ते उत्तर पाळतो. Browser बाहेरचा program तर विचारतच नाही.
📖 नवे शब्दCORS — कोणत्या इतर sites ची pages तुमचा API call करू शकतात ते browser ला सांगणारे नियमorigin — page ज्या site वरून आले ती, जसे https://school.examplepreflight — खऱ्या request आधी browser पाठवतो तो OPTIONS प्रश्नAccess-Control-Allow-Origin — कोणत्या origin ला परवानगी आहे ते सांगणारा header204 — No Content: preflight ठीक आहे, पुढे चला
⏪ आधी
school.example वरच्या page ने API call केला आणि browser ने तो थांबवला, अशा error सह जी API team ला कधी दिसलीच नाही.
💡 काय
CORS म्हणजे कोणत्या इतर sites call करू शकतात हे office ने browser ला सांगणे; browser आधी OPTIONS preflight ने विचारतो.
⚙️ कसे
https://school.example कडून आलेल्या OPTIONS ला Allow-* headers सह 204; https://evil.example कडून आलेल्याला 403.
🎯 का
शाळेचे page चालते आणि इतर sites ची pages users च्या browsers मध्ये अडवली जातात; CORS browsers ला वाचवते, तुमच्या API ला नाही.
🚀 पुढे
पुढचा धडा office ला खरे नाव देतो: api.school.example, ACM certificate, base paths आणि TLS.
🧪 इथे करून पाहा — कोणत्यातरी origin वरचे पान API ला call करते — preflight होतो की नाही, आणि पान उत्तर वाचू शकते का?
कोणत्याही यादृच्छिक नावाऐवजी api.school.example — certificates, base paths, endpoint types आणि mutual TLS.
🧒 सोप्या शब्दांत
पूर्वी office च्या दारावर कोणालाच लक्षात न राहणारा लांब यादृच्छिक code होता. आता तिथे नीट नावफलक आहे: api.school.example. Certificate हा फलक खरोखर शाळेचाच आहे हे सिद्ध करते. /v1 आणि /v2 या खोल्यांच्या पाट्या पाहुण्यांना जुन्या आणि नव्या offices कडे पाठवतात, आणि दोन्ही एकाच वेळी उघडी राहू शकतात.
📖 नवे शब्दcustom domain — API साठी तुमचे स्वतःचे नाव, जसे api.school.exampleACM — AWS Certificate Manager; edge-optimized APIs साठी certificate us-east-1 मध्येच हवेbase path mapping — domain वरचा path जो एका API आणि stage कडे जातो, जसे /v1 ते prodTLS — संवाद खाजगी ठेवणारे कुलूप; इथे किमान TLS 1.2mutual TLS — दोन्ही बाजू certificates दाखवतात, partners साठी वापरतात
⏪ आधी
Callers abc123.execute-api.ap-south-1.amazonaws.com वापरत, हे यादृच्छिक नाव API पुन्हा बनवली की बदलत असे.
💡 काय
Custom domain म्हणजे office चा स्वतःचा नावफलक, api.school.example, certificate सह, म्हणजे कुलपाचे चिन्ह खरे ठरते.
⚙️ कसे
Edge-optimized साठी us-east-1 मधले ACM certificate, Route 53 alias, /v1 आणि /v2 base paths, किमान TLS 1.2.
🎯 का
मागच्या APIs बदलल्या तरी नाव तेच राहते, आणि v1 व v2 एकाच domain खाली शेजारी शेजारी राहतात.
🚀 पुढे
पुढचा धडा office ची नोंदवही वाचतो: Count, 4XXError, 5XXError, आणि Latency विरुद्ध IntegrationLatency.
🧪 इथे करून पाहा — custom domain वरचा URL टाइप करा — DNS, certificate, base path, मग route
Count, 4XXError, 5XXError, Latency विरुद्ध IntegrationLatency, access logs आणि X-Ray — वेळ आणि errors कुठून येतात.
🧒 सोप्या शब्दांत
Office एक नोंदवही ठेवते, प्रत्येक पाहुण्याची एक ओळ: कधी, कुठे, काय उत्तर आणि किती वेळ लागला. ते एकूण आकडेही ठेवते: सहा पाहुणे, दोन चुकीचे forms, दोन kitchen मधल्या अडचणी. एका भेटीला 42 ms लागले आणि त्यातले 38 ms kitchen मध्ये गेले, तर office ला कळते की हळू भाग kitchen आहे.
📖 नवे शब्दCloudWatch metrics — office ठेवते ते एकूण आकडे, जसे Count, 4XXError आणि 5XXError4XXError — caller ची चूक असलेली उत्तरे, जसे 404 किंवा 4015XXError — backend अपयशी ठरलेली उत्तरे, जसे 502 किंवा 504Latency — पूर्ण प्रवासाचा वेळ, office अधिक kitchenIntegrationLatency — फक्त kitchen चा वेळaccess log — प्रत्येक request ची एक JSON ओळ, तुम्ही निवडलेल्या fields सह
⏪ आधी
Users 'हे हळू आहे' म्हणाले की वेळ office मध्ये गेला की kitchen मध्ये, आणि errors कोणाला आल्या, हे कोणालाच कळत नसे.
💡 काय
Monitoring म्हणजे office ची नोंदवही: CloudWatch metrics, प्रत्येक request ची एक JSON access-log ओळ, आणि मार्ग काढणारा X-Ray.
⚙️ कसे
Count=6, 4XXError=2, 5XXError=2; एका GET /students/7 चा Latency 42 ms, त्यापैकी IntegrationLatency 38 ms.
🎯 का
फरक म्हणजे office चा स्वतःचा वेळ, 4XX callers कडे आणि 5XX kitchens कडे बोट दाखवतात, म्हणून आधी योग्य बाजू दुरुस्त होते.
🚀 पुढे
पुढचा धडा कडक मर्यादांपर्यंत पोहोचतो: 29 s timeout, 10 MB payloads, private APIs, WAF आणि bill.
🧪 इथे करून पाहा — requests पाठवा आणि dashboard, latency bars आणि access log भरताना पाहा
Office kitchen साठी फक्त 29 सेकंद थांबते; त्यानंतर ते पाहुण्याला 'वेळ संपला' सांगते. खूप मोठी पार्सले office मधून नेली जात नाहीत; ती वेगळ्या delivery दाराने जातात. काही offices फक्त campus च्या आत असतात, आणि दारावरचा पहारेकरी ओळखीच्या त्रास देणाऱ्यांना परत पाठवतो. प्रत्येक पाहुण्याचा थोडा खर्चही येतो.
📖 नवे शब्द504 — Gateway Timeout: backend ला 29 s पेक्षा जास्त वेळ लागला502 — Bad Gateway: backend बंद पडले किंवा बिघडलेले उत्तर पाठवलेprivate API — फक्त तुमच्या network मधल्या VPC endpoint मधून पोहोचता येणारा APIAWS WAF — SQL injection, वाईट IPs आणि गर्दीविरुद्ध नियम असलेला पहारेकरीpre-signed URL — मोठी file थेट S3 वरून upload किंवा download करण्यासाठी मर्यादित वेळेची link
⏪ आधी
Teams ना मर्यादा production मध्येच कळल्या: 45 सेकंदांचा report मध्येच थांबला, मोठा upload अपयशी ठरला, आणि bill पाहून धक्का बसला.
💡 काय
Office च्या कडक मर्यादा: 29 s timeout, 10 MB payload; private APIs ते VPC मध्ये लपवतात आणि WAF वाईट visitors ना अडवतो.
⚙️ कसे
29 s वर GET /report ला 504, GET /broken ला 502; REST ला ~$3.50 प्रति million requests, HTTP ला ~$1.00.
🎯 का
मर्यादा आधी माहीत असल्या की लांब कामे job id सह 202 परत देतात, आणि मोठ्या files pre-signed S3 URLs मधून जातात.
🚀 पुढे
पुढे कुठे: API school office मागे काय असते ते design करते; VPC आणि IAM schools campus आणि SigV4 चे रक्षण शिकवतात.
🧪 इथे करून पाहा — कठीण कडांवर जोर लावा — हळू kitchen, मोठे upload, WAF आणि private API