Poradniki

Jak zbudować REST API: projekt, bezpieczeństwo i wdrożenie

Aby zbudować REST API, wypisz zasoby, którymi zarządza Twoja aplikacja (użytkownicy, zamówienia, rezerwacje), nadaj każdemu adres URL, na przykład /orders i /orders/{id}, a do działań użyj metod HTTP: GET do odczytu, POST do tworzenia, PATCH do aktualizacji, DELETE do usuwania. Zwracaj dane w JSON z sensownymi kodami statusu, waliduj każde wejście, wymagaj uwierzytelnienia i sprawdzania uprawnień do rekordu po stronie serwera oraz stronicuj listy. Następnie udokumentuj endpointy i wdróż API za HTTPS.

Ten poradnik opisuje decyzje projektowe, przykładowy zestaw tras, prompty dla narzędzia AI do budowania aplikacji oraz błędy, które prowadzą do luk bezpieczeństwa. Jeśli API jest dla Ciebie nowością, zacznij od czym jest API.

Kiedy potrzebujesz REST API

  • Twój frontend webowy musi zapisywać i wczytywać dane z serwera
  • Aplikacja mobilna, partner lub narzędzie automatyzacji potrzebuje dostępu do Twoich danych
  • Inne usługi wysyłają do Ciebie zdarzenia (webhooki)
  • Dzielisz pracę między zespołem frontendu a backendu

REST jest najpopularniejszym stylem, ale nie jedynym. REST kontra GraphQL wyjaśnia, kiedy lepiej sprawdza się jeden elastyczny endpoint zapytań.

Najpierw projekt: zasoby i trasy

Zapisz rzeczowniki występujące w Twojej aplikacji i to, co ludzie z nimi robią. Dla prostej aplikacji rezerwacji:

MetodaTrasaCo robiKod sukcesu
GET/api/bookingsListuje rezerwacje wywołującego (z paginacją)200
POST/api/bookingsTworzy rezerwację201
GET/api/bookings/{id}Pobiera jedną rezerwację200
PATCH/api/bookings/{id}Zmienia wybrane pola200
DELETE/api/bookings/{id}Anuluje rezerwację204
GET/api/healthSprawdzenie stanu dla monitoringu200

Te operacje odpowiadają tworzeniu, odczytowi, aktualizacji i usuwaniu; zobacz czym jest CRUD. Warte przestrzegania konwencje:

  • Rzeczowniki w liczbie mnogiej, bez czasowników w adresach: /bookings, a nie /getBookings.
  • Zagnieżdżaj tylko jeden poziom, gdy wyjaśnia to przynależność: /bookings/{id}/notes.
  • Działania niebędące CRUD mogą być pod-zasobami: POST /bookings/{id}/cancel jest czytelniejsze niż tajemnicze PATCH.
  • Spójne nazewnictwo pól, na przykład created_at wszędzie.

Kody statusu i błędy

Używaj standardowych kodów HTTP, aby klienci wiedzieli, co się stało, bez analizowania tekstu:

KodZnaczenieKiedy używać
200OKUdany odczyt lub aktualizacja
201CreatedPOST utworzył zasób
204No ContentSukces bez zwracanej treści
400Bad RequestDane wejściowe nie przeszły walidacji
401UnauthorizedBrak logowania lub nieprawidłowy token
403ForbiddenZalogowany, ale bez uprawnień
404Not FoundNie istnieje lub wywołujący nie może wiedzieć, że istnieje
409ConflictDuplikat lub termin jest już zajęty
429Too Many RequestsPrzekroczono limit zapytań
500Server ErrorCoś się zepsuło po Twojej stronie

Zwracaj błędy w jednym, spójnym kształcie JSON, na przykład {"error": {"code": "slot_taken", "message": "Ten termin nie jest już dostępny."}}, i nigdy nie dołączaj do odpowiedzi śladów stosu ani błędów bazy danych.

Opcje i kompromisy

DecyzjaProsty wybórAlternatywa
Gdzie znajduje się APITrasy API w Twoim frameworku webowymOsobny serwis API, przydatny przy kilku klientach lub innym języku
UwierzytelnianieCiasteczka sesyjne dla Twojej aplikacji webowejTokeny (bearer tokens lub klucze API) dla aplikacji mobilnych i zewnętrznych podmiotów
Paginacja?page=2&limit=20Kursorowa (?after=...), stabilniejsza przy dużych, zmieniających się listach
WersjonowanieBrak, dopóki nie masz zewnętrznych użytkowników/v1/ w ścieżce, gdy inni zaczynają od tego zależeć
DokumentacjaREADME z listą trasSpecyfikacja OpenAPI, z której narzędzia tworzą interaktywną dokumentację i kod klienta

Krok po kroku

  1. Wypisz zasoby i trasy jak wyżej, wraz z tym, kto może każdą wywołać.
  2. Zamodeluj dane w bazie danych z polami i relacjami, których potrzebujesz.
  3. Najpierw zbuduj trasy odczytu, potem tworzenie, aktualizację i usuwanie.
  4. Waliduj dane wejściowe przy każdym zapisie za pomocą biblioteki schematów: pola wymagane, typy, długości, dozwolone wartości. Odrzucaj nieznane pola.
  5. Dodaj uwierzytelnianie, a potem autoryzację per rekord: otwarcie /bookings/42 musi sprawdzić, czy rezerwacja 42 należy do wywołującego, a nie tylko to, czy ktoś jest zalogowany.
  6. Stronicuj każdą listę i ogranicz rozmiar strony.
  7. Ogranicz liczbę zapytań dla logowania i kosztownych tras. Zobacz limitowanie zapytań.
  8. Skonfiguruj CORS tylko wtedy, gdy przeglądarki z innych domen muszą wywoływać API, i wymień te źródła jawnie. Jak naprawić błędy CORS wyjaśnia błędy, które zobaczysz.
  9. Napisz dokumentację i testy dla każdej trasy, w tym przypadków błędów.
  10. Wdróż z sekretami w zmiennych środowiskowych, HTTPS, logami i sprawdzaniem stanu.

Prompty dla narzędzia AI do budowania

Szkielet:

Utwórz REST API dla rezerwacji z tymi trasami: GET /api/health, GET /api/bookings (z paginacją, maks. 50 na stronę), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Przechowuj dane w naszej bazie danych. Waliduj treść zapytań za pomocą biblioteki schematów i odrzucaj nieznane pola. Zwracaj błędy JSON w postaci {"error": {"code", "message"}} z poprawnymi kodami statusu (400, 401, 403, 404, 409). Trzymaj sekrety w zmiennych środowiskowych.

Bezpieczeństwo:

Wymagaj logowania na każdej trasie bookings. Przy każdym odczycie, aktualizacji i usunięciu sprawdzaj po stronie serwera, czy rezerwacja należy do bieżącego użytkownika; jeśli nie, zwróć 404. Nigdy nie akceptuj identyfikatorów użytkowników ani ról z treści zapytania. Ogranicz POST /api/bookings do 20 na minutę na użytkownika. Zapisuj błędy na serwerze bez zwracania śladów stosu.

Dokumentacja:

Napisz opis OpenAPI tych tras oraz krótkie README z przykładowymi zapytaniami i odpowiedziami dla każdej z nich.

Testowanie API

Testuj z zewnątrz frontendu, bo zrobią to atakujący:

  • Każda trasa działa dla poprawnych danych i zwraca opisany kształt oraz kod
  • Brakujące lub nieprawidłowe pola zwracają 400 z czytelnym komunikatem
  • Brak tokenu zwraca 401 na każdej chronionej trasie
  • Użytkownik A żądający rekordu użytkownika B przez ID dostaje 404 lub 403
  • Listy są stronicowane, a ogromny limit jest ograniczony
  • Zduplikowane lub kolidujące tworzenie zwraca 409, a nie 500
  • Limity zapytań zwracają 429
  • Odpowiedzi błędów nie zawierają śladów stosu, SQL ani sekretów
  • CORS zezwala tylko na zamierzone źródła

Częste błędy

  • Sprawdzanie logowania, ale nie własności rekordu. Najczęstsza dziura w API: każdy zalogowany użytkownik może odczytać dowolny rekord, zmieniając ID.
  • Ufanie klientowi. Ceny, role i identyfikatory użytkowników z treści zapytania można edytować.
  • Zwracanie całych wierszy bazy danych. Hasze haseł i pola wewnętrzne wyciekają. Wybierz, co ma zawierać każda odpowiedź.
  • Nieograniczone listy. Jedno zapytanie o wszystkie rekordy może spowolnić całą aplikację.
  • 200 OK z komunikatem błędu w środku. Klienci i monitoring nie wiedzą, że coś się nie udało.
  • CORS ustawiony na zezwalanie na wszystko w API, które używa ciasteczek.
  • Brak sprawdzania stanu i logów, więc o awariach dowiadujesz się od użytkowników.

Aby zrobić szerszy przegląd przed startem, zobacz listę kontrolną bezpieczeństwa dla aplikacji zbudowanych z AI.

Budowanie REST API w Mythex

W Mythex możesz poprosić o API jako część aplikacji lub jako osobny serwis. Przepis w dokumentacji REST API backend zawiera gotowy prompt startowy: nazwij framework i trasy, poproś o czytelne błędy JSON, trzymaj sekrety w zmiennych środowiskowych i dołącz Dockerfile. Backendy kontenerowe w Node, Pythonie, C#, Javie i innych są publikowane przez Dockerfile, a wdrożeniem z menu Publish zajmuje się Mythex (backendy API). Projekt może uruchamiać stronę i serwer API obok siebie, a między nimi przełączać się w podglądzie. Klucze przechowuj jako sekrety projektu, a jeśli API potrzebuje bazy danych, poproś o nią w czacie. Pracę cykliczną wokół API opisuje jak uruchamiać zadania w tle.

Pytania

Czym jest REST API?

REST API to sposób, w jaki programy mogą pracować z danymi Twojej aplikacji przez HTTP. Każdy rodzaj danych jest zasobem z własnym adresem URL, na przykład /orders, a standardowe metody wykonują na nim działania: GET do odczytu, POST do tworzenia, PATCH lub PUT do aktualizacji i DELETE do usuwania. Dane są zwykle przesyłane w formacie JSON.

W jakim języku powinienem zbudować REST API?

Użyj tego, co Ty lub Twój zespół potraficie utrzymać. Node.js z Express lub Fastify, Python z FastAPI oraz frameworki C# lub Java sprawdzą się dobrze. Zasady projektowania tras, kodów statusu, walidacji i uwierzytelniania są ważniejsze niż sam język.

Jak zabezpieczyć REST API?

Wymagaj uwierzytelnienia na każdej trasie, która nie jest publiczna, sprawdzaj po stronie serwera, czy wywołujący ma dostęp do konkretnego rekordu, waliduj wszystkie dane wejściowe, używaj HTTPS, ogranicz liczbę zapytań i przechowuj sekrety w zmiennych środowiskowych. Nigdy nie ufaj identyfikatorom ani rolom przesłanym przez klienta.

Czy potrzebuję osobnego backendu dla REST API?

Nie zawsze. Frameworki takie jak Next.js potrafią obsługiwać trasy API obok stron. Osobny serwis API ma sens, gdy z API korzysta kilku klientów (web, mobile, partnerzy) albo gdy wymaga on własnego języka lub skalowania.

Mythex · Pricing · Zbuduj wszystko z AI · Szablony stron i aplikacji · Mythex w porównaniu · Słownik budowania aplikacji z AI · Darmowe narzędzia do budowania aplikacji z 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 ਪੰਜਾਬੀ Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)