Mga gabay

Paano Gumawa ng REST API: Disenyo, Seguridad at Deployment

Para gumawa ng REST API, ilista ang mga resources na hahawakan ng app mo (users, orders, bookings), bigyan ang bawat isa ng URL gaya ng /orders at /orders/{id}, at gamitin ang HTTP methods para sa mga aksyon: GET para magbasa, POST para gumawa, PATCH para mag-update, at DELETE para mag-alis. Magbalik ng JSON na may malinaw na status codes, i-validate ang bawat input, humingi ng authentication at pagsusuri ng permiso bawat record sa server, at i-paginate ang mga listahan. Pagkatapos, idokumento ang mga endpoint at i-deploy ang API sa likod ng HTTPS.

Sakop ng gabay na ito ang mga desisyon sa disenyo, isang halimbawang hanay ng mga route, mga prompt para sa AI app builder, at ang mga pagkakamaling nagdudulot ng butas sa seguridad. Kung bago pa sa iyo ang mga API, magsimula sa ano ang API.

Kailan ka kailangan ng REST API

  • Kailangan ng web frontend mo na mag-save at mag-load ng data mula sa server
  • Kailangan ng mobile app, partner o automation tool ang access sa data mo
  • May ibang serbisyong nagpapadala sa iyo ng mga event (webhooks)
  • Hinahati mo ang trabaho sa pagitan ng frontend at backend team

Ang REST ang pinakakaraniwang estilo, pero hindi lang ito ang isa. Ipinapaliwanag ng REST vs GraphQL kung kailan mas angkop ang isang flexible na query endpoint.

Unang disenyo: resources at routes

Isulat ang mga pangngalan sa app mo at kung ano ang ginagawa ng mga tao sa mga ito. Para sa simpleng booking app:

MethodRouteAno ang ginagawaSuccess code
GET/api/bookingsIlista ang bookings ng caller (may pagination)200
POST/api/bookingsGumawa ng booking201
GET/api/bookings/{id}Kunin ang isang booking200
PATCH/api/bookings/{id}Baguhin ang ilang field200
DELETE/api/bookings/{id}Kanselahin ang booking204
GET/api/healthHealth check para sa monitoring200

Nag-mamapa ang mga ito sa create, read, update at delete; tingnan ang ano ang CRUD. Mga kombensiyong sulit sundin:

  • Plural na pangngalan, walang pandiwa sa URL: /bookings, hindi /getBookings.
  • Isang level lang ang nesting kapag nakakatulong ito sa pagpapakita ng ownership: /bookings/{id}/notes.
  • Ang mga aksyong hindi CRUD ay puwedeng maging sub-resource: mas malinaw ang POST /bookings/{id}/cancel kaysa sa magic na PATCH.
  • Pare-parehong pangalan ng mga field, gaya ng created_at sa lahat ng lugar.

Status codes at errors

Gumamit ng karaniwang HTTP codes para malaman ng mga client kung ano ang nangyari nang hindi kailangang basahin ang teksto:

CodeIbig sabihinGamitin kapag
200OKMatagumpay na pagbasa o pag-update
201CreatedGumawa ng bago ang POST
204No ContentTagumpay pero walang ibabalik
400Bad RequestHindi pumasa sa validation ang input
401UnauthorizedHindi naka-log in o mali ang token
403ForbiddenNaka-log in pero hindi pinapayagan
404Not FoundHindi umiiral, o hindi dapat malaman ng caller na umiiral ito
409ConflictDuplicate, o nakuha na ang slot
429Too Many RequestsNaabot ang rate limit
500Server ErrorMay nasira sa panig mo

Ibalik ang mga error sa iisang pare-parehong JSON format, halimbawa {"error": {"code": "slot_taken", "message": "Hindi na available ang oras na iyan."}}, at huwag kailanman isama ang stack traces o database errors sa mga response.

Mga opsyon at trade-off

DesisyonSimpleng pagpipilianAlternatibo
Saan nakatira ang APIAPI routes sa web framework moHiwalay na API service, kapaki-pakinabang kapag maraming client o ibang wika
AuthenticationSession cookies para sa sarili mong web appTokens (bearer tokens o API keys) para sa mobile app at mga third party
Pagination?page=2&limit=20Cursor-based (?after=...), mas matatag para sa malalaki at nagbabagong listahan
VersioningWala muna hangga't walang outside users/v1/ sa path kapag may umaasa na
DocsREADME na naglilista ng routesOpenAPI spec, na kayang gawing interactive docs at client code ng mga tool

Hakbang-hakbang

  1. Ilista ang resources at routes gaya ng nasa itaas, kasama kung sino ang puwedeng tumawag sa bawat isa.
  2. I-model ang data sa database mo, kasama ang mga field at relasyong kailangan.
  3. Unahin ang read routes, saka ang create, update at delete.
  4. I-validate ang input sa bawat write gamit ang schema library: kinakailangang field, uri, haba, pinapayagang values. Tanggihan ang hindi kilalang field.
  5. Idagdag ang authentication, saka ang authorization bawat record: ang pag-load ng /bookings/42 ay dapat magsuri na pag-aari ng caller ang booking 42, hindi lang na may naka-log in na tao.
  6. I-paginate ang bawat listahan at limitahan ang laki ng page.
  7. Maglagay ng rate limit sa login at sa mga mabibigat na route. Tingnan ang rate limiting.
  8. I-configure ang CORS lang kung kailangang tawagin ng browser sa ibang domain ang API, at ilista nang tahasan ang mga origin na iyon. Ipinapaliwanag ng paano ayusin ang CORS errors ang mga error na makikita mo.
  9. Sumulat ng docs at tests para sa bawat route, kasama ang mga kaso ng pagkabigo.
  10. I-deploy na may secrets sa environment variables, HTTPS, logs at health check.

Mga prompt para sa AI builder mo

Scaffold:

Gumawa ng REST API para sa bookings na may mga route na ito: GET /api/health, GET /api/bookings (may pagination, pinakamarami 50 bawat page), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Itago ang data sa database natin. I-validate ang request bodies gamit ang schema library at tanggihan ang mga hindi kilalang field. Ibalik ang JSON errors bilang {"error": {"code", "message"}} na may tamang status codes (400, 401, 403, 404, 409). Itago ang secrets sa environment variables.

Seguridad:

Humingi ng login sa bawat bookings route. Sa bawat read, update at delete, tiyakin sa server na pag-aari ng kasalukuyang user ang booking; magbalik ng 404 kung hindi. Huwag kailanman tanggapin ang user IDs o roles mula sa request body. Limitahan ang POST /api/bookings sa 20 bawat minuto bawat user. I-log ang mga error sa server nang hindi nagbabalik ng stack traces.

Docs:

Sumulat ng OpenAPI description ng mga route na ito, at maikling README na may halimbawang request at response para sa bawat isa.

Pagsubok sa API mo

Subukan ito mula sa labas ng frontend, dahil susubukan din ito ng mga attacker:

  • Gumagana ang bawat route sa tamang input at nagbabalik ng dokumentadong hugis at code
  • Ang nawawala o maling field ay nagbabalik ng 400 na may malinaw na mensahe
  • Walang token, nagbabalik ng 401 sa bawat protected route
  • Ang record ni user B na hiniling ni user A gamit ang ID ay nagbabalik ng 404 o 403
  • Naka-paginate ang mga listahan; limitado ang malaking limit
  • Ang duplicate o nagbabanggaang create ay nagbabalik ng 409, hindi 500
  • Ang rate limits ay nagbabalik ng 429
  • Walang stack traces, SQL o secrets sa error responses
  • Pinapayagan lang ng CORS ang mga origin na gusto mo

Mga karaniwang pagkakamali

  • Pagtingin sa login pero hindi sa pag-aari. Ito ang pinakakaraniwang butas sa API: kahit sinong naka-log in na user ay puwedeng magbasa ng anumang record sa pamamagitan ng pagpalit ng ID.
  • Pagtitiwala sa client. Ang presyo, role at user ID mula sa request body ay puwedeng baguhin.
  • Pagbabalik ng buong database rows. Lumalabas ang password hashes at internal fields. Piliin kung ano ang isasama sa bawat response.
  • Mga listahang walang limitasyon. Ang isang request para sa bawat record ay puwedeng magpabagal sa buong app.
  • 200 OK na may mensahe ng error sa loob. Hindi malalaman ng client at monitoring na pumalya ito.
  • CORS na naka-allow sa lahat sa API na gumagamit ng cookies.
  • Walang health check o logs, kaya malalaman mo ang outage mula sa mga user.

Para sa mas malawak na pagsusuri bago ilunsad, tingnan ang security checklist para sa mga app na ginawa ng AI.

Pagbuo ng REST API sa Mythex

Puwede kang humingi ng API sa Mythex bilang bahagi ng app mo o bilang sarili nitong serbisyo. May panimulang prompt ang docs recipe na REST API backend: pangalanan ang framework at mga route, humingi ng malinaw na JSON errors, itago ang secrets sa environment variables, at isama ang Dockerfile. Ang container backends sa Node, Python, C#, Java at iba pa ay ipa-publish sa pamamagitan ng Dockerfile, at ang Mythex na ang bahala sa deploy mula sa Publish (API backends). Puwedeng tumakbo nang magkatabi ang website at API server ng isang project, at puwede kang lumipat sa pagitan nila sa preview. Itago ang keys bilang project secrets, at kung kailangan ng API ng database, humingi nito sa chat. Para sa mga scheduled na gawain sa paligid ng API mo, tingnan ang paano magpatakbo ng background jobs.

Mga tanong

Ano ang REST API?

Ang REST API ay paraan para magamit ng mga program ang data ng app mo sa pamamagitan ng HTTP. Ang bawat uri ng data ay resource na may sariling URL, gaya ng /orders, at may mga karaniwang method na gumagawa sa mga ito: GET para magbasa, POST para gumawa, PATCH o PUT para mag-update, at DELETE para mag-alis. Karaniwang ipinapadala ang data bilang JSON.

Anong wika ang dapat kong gamitin sa paggawa ng REST API?

Gamitin ang kaya ninyong alagaan ng team mo. Gumagana nang maayos ang Node.js kasama ang Express o Fastify, ang Python kasama ang FastAPI, at ang C# o Java frameworks. Mas mahalaga ang mga patakaran sa disenyo ng routes, status codes, validation at authentication kaysa sa wikang gamit.

Paano ko sisiguraduhin ang REST API?

Humingi ng authentication sa bawat route na hindi pampubliko, tiyaking sa server na puwedeng ma-access ng caller ang bawat partikular na record, i-validate ang lahat ng input, gumamit ng HTTPS, limitahan ang dami ng request, at itago ang secrets sa environment variables. Huwag kailanman pagkatiwalaan ang mga ID o role na ipinadala ng client.

Kailangan ko ba ng hiwalay na backend para sa REST API?

Hindi palagi. Puwedeng magserbisyo ang mga framework gaya ng Next.js ng API routes kasabay ng mga pahina. Nagiging makatuwiran ang hiwalay na API service kapag maraming client ang gumagamit nito (web, mobile, partners), o kapag kailangan nito ng sariling wika o scaling.

Mythex · Pricing · Gumawa ng kahit ano gamit ang AI · Mga template ng website at app · Paghahambing ng Mythex · Glosaryo ng paggawa ng app gamit ang AI · Mga libreng tool sa paggawa ng app gamit ang AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)