Budowanie integracji API z agentem Cursora
Agent Cursora buduje produkcyjną integrację z zewnętrznym API, gdy pracuje na nieprzechodzących testach akceptacyjnych, aktualnej dokumentacji SDK i koncie testowym. Agent pisze wspólnego klienta (ponowienia, circuit breaker, klucze idempotencji), adaptery dostawców i podpisane handlery webhooków, a zamockowane testy i Stripe CLI dowodzą, że ścieżki awarii działają poprawnie.
Poprzedni programista zostawił niedokończoną integrację ze Stripe. Handler webhooków połyka błędy, wywołania SendGrid nie mają ponowień, a kod Twilio wywraca się przy pierwszym 429. Teraz płatność, e-mail z potwierdzeniem i SMS muszą działać jako jeden przepływ, a podwójne obciążenie karty albo zgubiony webhook to zgłoszenie od klienta, któremu zniknęły pieniądze.
Ta strona jest dla programistów, którzy z pomocą agenta Cursora podłączają zewnętrzne API do backendu w TypeScripcie. Przykłady korzystają z tras Next.js App Router oraz SDK dla Node: stripe (22.6.2), @sendgrid/mail (8.1.6), @sendgrid/eventwebhook (8.0.0) i twilio (6.1.2), sprawdzonych w npm 26 września 2026 roku. Funkcje Cursora wymienione na tej stronie (Plan Mode, Rules, MCP, pluginy, Bugbot) zweryfikowaliśmy w dokumentacji Cursora 28 sierpnia 2026 roku, na linii Cursor 3.x. Jeśli sama pętla pracy z czatem jest dla ciebie nowa, zacznij od strony praca z czatem agenta w Cursorze. Pracujesz z innym agentem? Zobacz integracje z zewnętrznymi API w Claude Code albo integracje w Codeksie.
Co daje ten sposób budowania integracji API
Dział zatytułowany „Co daje ten sposób budowania integracji API”- Siedem kroków w ustalonej kolejności: od audytu do pull requesta z dowodami.
- Sześć promptów do skopiowania: audyt integracji, testy akceptacyjne, klient bazowy z adapterem Stripe, orkiestracja powiadomień, podpisane webhooki oraz raport z dowodami do pull requesta.
- Projektowy plik
mcp.json, który daje agentowi aktualną dokumentację SDK (Context7) i konto Stripe w trybie testowym (Stripe MCP). - Procedurę weryfikacji, która dowodzi działania ponowień, idempotencji i sprawdzania podpisów bez czytania każdej wygenerowanej linii.
- Sześć awarii produkcyjnych, każdą z krokiem naprawczym.
Jak agent Cursora buduje integrację, której możesz zaufać?
Dział zatytułowany „Jak agent Cursora buduje integrację, której możesz zaufać?”Kolejność znaczy więcej niż same prompty. Agent, który najpierw pisze klienta, a potem testy, tworzy testy opisujące to, co akurat zbudował. Agent, który pisze na podstawie nieaktualnej wiedzy z treningu, wywołuje wersje API i metody SDK, których już nie ma.
- Zrób audyt tego, co istnieje. Zmapuj każdego dostawcę, każdy sekret i każdą ścieżkę awarii, zanim cokolwiek zmienisz.
- Podłącz aktualną dokumentację i sandbox. Context7 dla dokumentacji SDK, Stripe MCP w trybie testowym dla danych testowych.
- Napisz nieprzechodzące testy akceptacyjne. Jeden test na każde zachowanie z tabeli akceptacyjnej poniżej, każde wywołanie HTTP zamockowane.
- Zbuduj klienta bazowego i jednego dostawcę. Najpierw Stripe, bo ma najostrzejsze reguły idempotencji i webhooków.
- Dodaj pozostałych dostawców i orkiestrację. SendGrid i Twilio kopiują kształt adaptera Stripe.
- Zabezpiecz webhooki. Weryfikacja podpisu na surowym body, okno ochrony przed powtórzeniem, deduplikacja po ID zdarzenia.
- Uruchom bramki i zbierz dowody. Testy, sprawdzenie typów, linter, prawdziwy podpisany webhook ze Stripe CLI, a na końcu review.
Zrób audyt istniejących integracji, zanim cokolwiek zmienisz
Dział zatytułowany „Zrób audyt istniejących integracji, zanim cokolwiek zmienisz”Zacznij w Plan Mode, który tworzy plan przed napisaniem jakiegokolwiek kodu. Dzięki temu agent czyta i raportuje, zamiast „naprawiać” pierwszą rzecz, którą zobaczy. Dołącz katalogi z kodem integracji.
Zapisz tę tabelę w opisie pull requesta. To stan „przed” – pierwsza część twoich dowodów, a recenzent widzi z niej, które ryzyka ta zmiana ma usunąć.
Daj agentowi aktualną dokumentację SDK i sandbox
Dział zatytułowany „Daj agentowi aktualną dokumentację SDK i sandbox”SDK płatności i komunikacji zmieniają nazwy metod, wersje API i helpery webhooków między wersjami głównymi. Dwa serwery MCP usuwają większość wynikającego z tego zgadywania:
- Context7 (
@upstash/context7-mcp4.1.1) na żądanie pobiera dokumentację dopasowaną do wersji biblioteki. Dopisz do promptu „use context7”, a agent sprawdzi SDK, zanim zacznie pisać wywołania. - Stripe MCP (
@stripe/mcp0.3.3, zdalniehttps://mcp.stripe.comz OAuth) pozwala agentowi tworzyć testowe produkty, ceny i klientów oraz przeglądać zdarzenia.
Stripe instaluj najpierw poleceniem /add-plugin stripe — to sposób instalacji w Cursorze, który podaje README Stripe. Alternatywnie dodaj zdalny serwer po adresie URL w projektowym pliku .cursor/mcp.json, obok Context7; Cursor poprosi o logowanie OAuth przy pierwszym użyciu (kształt wpisu według README Stripe, sprawdzone 2026-09-26). Żaden wpis nie zawiera poświadczeń, więc plik można bezpiecznie commitować: Context7 działa bez klucza (darmowy klucz podnosi limity), a serwer Stripe loguje cię przez OAuth.
{ "mcpServers": { "context7": { "url": "https://mcp.context7.com/mcp" }, "stripe": { "url": "https://mcp.stripe.com" } }}Każdy podłączony serwer dokłada definicje swoich narzędzi do kontekstu agenta. Wyłącz te, których to zadanie nie potrzebuje; jak zmierzyć ten narzut, pokazuje strona ograniczanie kosztu tokenów MCP. Pełną konfigurację opisują strony konfiguracja MCP w Cursorze i przewodnik po Context7.
Napisz testy akceptacyjne, zanim powstanie klient
Dział zatytułowany „Napisz testy akceptacyjne, zanim powstanie klient”Tabela akceptacyjna to specyfikacja. Należy do ciebie, a agent zamienia każdy jej wiersz w test.
| Zachowanie | Test, który to dowodzi |
|---|---|
429 z Retry-After: 2 czeka co najmniej 2 sekundy, potem ponawia | Mock zwraca raz 429, potem 200; sztuczne timery sprawdzają opóźnienie |
| Ponowiona mutacja w Stripe używa tego samego klucza idempotencji | Mock zapisuje nagłówek Idempotency-Key przy obu próbach |
| Pięć nieudanych prób HTTP w ciągu 60 sekund (ponowienia się liczą) otwiera obwód; kolejne wywołania od razu kończą się błędem | Mock pięć razy zwraca 503; następne wywołanie nie wysyła żądania HTTP |
| Błąd e-maila lub SMS-a nigdy nie psuje checkoutu | Mock SendGrid zwraca 500; checkout kończy się sukcesem, a w bazie jest powiadomienie w kolejce |
| Webhook ze złym podpisem jest odrzucany | Zmienione body zwraca 400 i żaden handler się nie uruchamia |
| Zduplikowane doręczenie webhooka jest przetwarzane raz | To samo ID zdarzenia wysłane dwa razy; efekt uboczny występuje raz |
Przeczytaj sześć testów, a nie cały diff. Zacommituj je osobno, żeby później móc udowodnić, że agent ich nie osłabił. Strategię mockowania opisuje szerzej strona wzorce testowania w Cursorze.
Zbuduj klienta bazowego i adapter Stripe
Dział zatytułowany „Zbuduj klienta bazowego i adapter Stripe”Gdy testy są już w repozytorium, poproś o wspólnego klienta i jednego dostawcę w tej samej turze. Klient bazowy zawiera ponowienia, circuit breaker i mapowanie błędów, więc każdy kolejny dostawca dziedziczy je automatycznie.
Gdy Stripe przechodzi testy, powtórz prompt dla sendgrid-client.ts i twilio-client.ts z dopiskiem „follow the shape of @src/integrations/stripe-client.ts”. Żadne z tych SDK nie udostępnia opcji klucza idempotencji przy wysyłce (sprawdzone w @sendgrid/mail 8.1.6 i twilio 6.1.2), więc deduplikację e-maili i SMS-ów musi zapewnić twoja własna tabela powiadomień, którą tworzy następny krok.
Orkiestruj płatność, e-mail i SMS bez psucia checkoutu
Dział zatytułowany „Orkiestruj płatność, e-mail i SMS bez psucia checkoutu”Trudność nie leży w pojedynczym wywołaniu, tylko w decyzji, co oznacza częściowa awaria. Ten prompt koduje jedną zasadę: płatność jest źródłem prawdy, a powiadomienia wysyłamy w trybie best-effort, z ponowieniami.
Projekt schematu bazy opisuje strona projektowanie bazy danych w Cursorze, a obsługę kolejki martwych wiadomości (dead letter) szerzej omawia przepis na wzorce odzyskiwania po awarii.
Zabezpiecz endpointy webhooków
Dział zatytułowany „Zabezpiecz endpointy webhooków”Trasy webhooków to publiczne adresy URL. Każdy z trzech dostawców podpisuje żądania inaczej, a każdy helper potrzebuje surowego body: w trasie Next.js App Router oznacza to await request.text(), nigdy request.json(), bo ponownie zserializowany JSON nie pasuje już do podpisu.
| Dostawca | Helper weryfikacji (sprawdzone 2026-09-26) | Nagłówek |
|---|---|---|
| Stripe | stripe.webhooks.constructEvent (Node) lub constructEventAsync (środowiska z Web Crypto); domyślna tolerancja 300 sekund | Stripe-Signature |
| SendGrid | new EventWebhook().verifySignature(ew.convertPublicKeyToECDSA(key), rawBody, signature, timestamp) z @sendgrid/eventwebhook; key to klucz weryfikacyjny z Mail Settings | X-Twilio-Email-Event-Webhook-Signature i -Timestamp |
| Twilio | twilio.validateRequest dla callbacków statusu | X-Twilio-Signature |
Punkt 4 poprawia popularną instrukcję „zwróć 200 od razu, przetwarzaj asynchronicznie”. Jeśli proces padnie po wysłaniu 200, a przed zapisaniem zdarzenia, dostawca uznaje doręczenie za zakończone i zdarzenie przepada. Najpierw zapisz, potem potwierdź.
Wiersz deduplikacji i zapisane zdarzenie muszą trafić do bazy w tej samej transakcji (wzorzec transactional outbox). Gdyby były to dwa osobne zapisy, awaria między nimi zostawiłaby zapisane ID zdarzenia bez samego zdarzenia: ponowienie od dostawcy trafiłoby na ograniczenie UNIQUE, dostałoby 200, a zdarzenie przepadłoby bez śladu.
Jak zweryfikować integrację bez czytania każdej linii?
Dział zatytułowany „Jak zweryfikować integrację bez czytania każdej linii?”Sprawdzasz zachowanie i dowody, a nie wygenerowany kod. Dowód opiera się na czterech bramkach:
-
Zatwierdzone testy się nie zmieniły. Porównaj je z commitem, który je dodał, i wypisz pliki, których git jeszcze nie śledzi, na przykład nowy plik testów; jakikolwiek wynik którejkolwiek komendy oznacza, że agent zmienił specyfikację.
Okno terminala git diff --stat TESTS_COMMIT -- src/integrations/__tests__/git status --porcelain src/integrations/__tests__/Zastąp
TESTS_COMMIThashem commita, który dodał testy akceptacyjne. -
Testy, sprawdzenie typów i linter są zielone. Uruchom w terminalu te same komendy co CI, zamiast polegać na podsumowaniu agenta.
-
Prawdziwy podpisany webhook dociera do twojej trasy. Stripe CLI (
npm install -g @stripe/clilubbrew install stripe) przekazuje zdarzenia z trybu testowego do serwera deweloperskiego i podpisuje je sekretem sesji, który wypisuje teżstripe listen --print-secret. Wpisz ten sekret doSTRIPE_WEBHOOK_SECRETw.env.local, a potem uruchom Stripe CLI w dwóch kolejnych terminalach.stripe listendziała na pierwszym planie, dopóki go nie zatrzymasz.Terminal 2:
Okno terminala stripe listen --forward-to localhost:3000/api/webhooks/stripeTerminal 3, z ID zamówienia, które dodałeś do testowej bazy danych:
Okno terminala stripe trigger payment_intent.succeeded --add payment_intent:metadata.order_id=ORDER_IDOczekuj
200w wyjściulisten, jednego wiersza wprocessed_webhook_eventsi po jednym wierszu wnotificationsna kanał (e-mail, SMS). Nie traktuj drugiegostripe triggerjako testu duplikatu: każde uruchomienie tworzy nowy PaymentIntent z nowym ID zdarzenia, więc druga para powiadomień to poprawne zachowanie. Ponowne doręczenie zdarzenia o tym samym ID sprawdza test akceptacyjny 6. -
Review ścieżek, które dotykają pieniędzy. Bugbot albo twój recenzent AI przegląda cały pull request; człowiek czyta tylko mutację płatności i trasę webhooka, bo tam błąd kosztuje pieniądze. Konfigurację opisuje strona Bugbot.
Poproś agenta o zebranie dowodów – wtedy recenzent nie musi robić tego sam.
Programista odpowiedzialny za integrację zatwierdza tabelę akceptacyjną; druga osoba zatwierdza pliki płatności i webhooków. Dodaj regułę projektu „never modify files under src/integrations/__tests__ unless asked”, żeby kolejne czaty przestrzegały kontraktu; jak to zrobić, pokazuje strona reguły projektu w Cursorze. Żeby wymusić tę zasadę, a nie tylko o nią prosić, hook Cursora może odrzucać edycje w tym folderze; bramka git diff opisana wyżej nadal to potwierdza.
Co psuje się, gdy integracje z zewnętrznymi API trafiają na produkcję?
Dział zatytułowany „Co psuje się, gdy integracje z zewnętrznymi API trafiają na produkcję?”Agent wywołuje metodę SDK, która już nie istnieje. Objaw: błędy typów przy wywołaniach stripe.* albo błędy w runtime po aktualizacji SDK. Naprawa: wróć do ostatniego zielonego commita, dopisz do promptu „use context7” i wersję SDK z package.json, po czym powtórz krok.
Ponowienia tworzą podwójne obciążenia. Żądanie przekracza limit czasu, choć Stripe już je przetworzył, a ponowienie obciąża kartę drugi raz. Naprawa: zwróć klientowi środki za zduplikowaną płatność w Stripe Dashboard, a potem upewnij się, że każda mutacja wyprowadza klucz idempotencji ze stabilnego identyfikatora biznesowego (ID zamówienia), nigdy z losowej wartości generowanej przy każdej próbie. Regresję wyłapie test 2.
Limity zapytań pojawiają się dopiero na produkcji. Zamockowane testy nigdy nie trafiają w prawdziwy limit. Naprawa: dodaj w kliencie bazowym token bucket per dostawca ustawiony na około 80% opublikowanego limitu, kolejkuj nadmiar i ustaw alert na częstość RateLimitError.
Zdarzenia webhooków przychodzą w złej kolejności albo dwa razy. Dostawcy nie gwarantują kolejności i ponawiają doręczenia, które uznali za nieudane. Naprawa: opieraj handlery na ID zdarzenia (już deduplikowanym przez trasy webhooków w kroku 6) i na bieżącym stanie obiektu pobranym z API, a nie na kolejności przyjścia zdarzeń.
Circuit breaker oscyluje. Przeciążony dostawca nie przechodzi jedynego żądania próbnego w stanie półotwartym, obwód znów się otwiera, a checkout działa w trybie awaryjnym przez kilka minut. Naprawa: w stanie półotwartym przepuszczaj niewielką część ruchu i zamykaj obwód dopiero po kilku kolejnych sukcesach; przejście przetestuj na sztucznych timerach.
Mocki rozjeżdżają się z prawdziwym API. Testy są zielone, a dostawca zmienił pole. Naprawa: uruchamiaj ten sam zestaw testów co noc na środowiskach testowych dostawców, poza bramką pull requesta, i głośno zgłaszaj każdą niezgodność struktury.
Kiedy serwer MCP powinien zastąpić kod integracji?
Dział zatytułowany „Kiedy serwer MCP powinien zastąpić kod integracji?”Serwery MCP to narzędzia dla agenta, a nie runtime twojej aplikacji. Używaj ich w trakcie budowania, a wszystko, co produkt robi w imieniu klienta, zostaw w kodzie.
| Potrzeba | Użyj | Dlaczego |
|---|---|---|
| Tworzenie testowych produktów, klientów lub zdarzeń podczas pracy | Stripe MCP (tryb testowy) | Bez jednorazowych skryptów; agent przygotowuje dane testowe w tym samym czacie |
| Sprawdzenie aktualnej sygnatury SDK przed napisaniem wywołania | Context7 | Dokumentacja dopasowana do wersji biblioteki |
| Zakładanie issues lub czytanie logów CI dotyczących integracji | Serwer GitHub MCP | Praca operacyjna, bez kodu produktu |
| Obciążenie klienta, wysłanie potwierdzenia, weryfikacja webhooka | Twój kod integracji | Potrzebujesz ponowień, idempotencji, logów i testów pod twoją kontrolą |