백엔드와 SDK
외부 API (b77.http)
비밀 키를 노출하지 않고 어떤 HTTPS API든 호출해요.
b77.http.fetch는 builder77 서버에서 외부 HTTPS API를 호출해요. API 키는 설정 → 비밀 키(고급 설정 안)에 저장하세요. builder77이 서버에 암호화해서 보관해요. 코드에는 {{secret:NAME}}이라고 쓰면 서버가 값을 채워 넣기 때문에 키가 브라우저에 전달되지 않아요.
const res = await b77.http.fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST', // default GET
headers: { Authorization: 'Bearer {{secret:OPENAI_API_KEY}}' },
body: { model: 'gpt-4o-mini', messages: [{ role: 'user', content: 'Hi!' }] }, // object → JSON, or a string
});
if (res.ok) console.log(res.data); // { ok, status, headers, body (text), data (parsed JSON or null) }호출 한 번에 연동 크레딧 1개가 들어요. 호출은 https만 쓸 수 있고, 15초가 지나면 시간 초과되며, 응답은 최대 1 MB까지 받을 수 있어요. API가 키를 응답에 그대로 돌려주면 앱이 응답을 보기 전에 [secret]으로 바뀌어요.
비밀 키별 규칙
앱을 쓰는 사람은 누구나 비밀 키를 보지 않고도 그 키로 호출할 수 있어요. 그래서 비밀 키마다 내가 허용한 방식으로만 작동해요.
- 허용 호스트: 키를 보낼 수 있는 유일한 서버예요 (예:
api.openai.com,*.example.com은 하위 도메인까지 포함). - 허용 메서드: 기본값은 GET과 POST예요.
- 허용 경로:
/v1/chat/같은 경로 접두사를 지정할 수 있어요. 비워 두면 모든 경로가 허용돼요. - 키를 넣을 수 있는 위치: 기본값은 인증 헤더(Authorization, X-Api-Key, Api-Key, X-Goog-Api-Key 등)뿐이에요. 쿼리 매개변수(이름으로 지정, 예:
key), URL 경로, 요청 본문은 직접 켜기 전까지 꺼져 있어요.
규칙을 어긴 호출은 아무것도 보내기 전에 상태 코드 403으로 거부돼요.
URL이나 본문에 넣는 키
가능하면 헤더로 키를 받는 API를 쓰세요. 주소에 키를 넣는 API도 있어요. 그런 경우에는 그 위치만 정확히 허용하고 경로를 좁혀 두세요.
// Settings → Secrets: TELEGRAM_TOKEN, host api.telegram.org, "In the URL path" on,
// allowed path /bot{{secret:TELEGRAM_TOKEN}}/sendMessage
await b77.http.fetch('https://api.telegram.org/bot{{secret:TELEGRAM_TOKEN}}/sendMessage', {
method: 'POST',
body: { chat_id: 12345, text: 'New booking!' },
});요청 본문은 API가 꼭 요구할 때만 허용하세요. 허용하면 앱을 쓰는 누구나 그 API가 저장하는 곳(메시지, 메모, 공개 파일)에 키를 써 넣고 다시 읽어 낼 수 있어요.