| --- |
| title: ์๋ฒ |
| description: HTTP๋ฅผ ํตํด OpenCode ์๋ฒ์ ์ํธ ์์ฉํฉ๋๋ค. |
| --- |
| |
| import config from "../../../../config.mjs" |
| export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts` |
|
|
| `opencode serve` ๋ช
๋ น์ opencode ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ ์๋ OpenAPI ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํ๋ headless HTTP ์๋ฒ๋ฅผ ์คํํฉ๋๋ค. |
|
|
| --- |
| |
| |
|
|
| ```bash |
| opencode serve [--port <number>] [--hostname <string>] [--cors <origin>] |
| ``` |
|
|
| |
|
|
| | ํ๋๊ทธ | ์ค๋ช
| ๊ธฐ๋ณธ๊ฐ | |
| | --------------- | ------------------------------------- | ---------------- | |
| | `--port` | ์์ ๋๊ธฐํ ํฌํธ | `4096` | |
| | `--hostname` | ์์ ๋๊ธฐํ ํธ์คํธ๋ช
| `127.0.0.1` | |
| | `--mdns` | mDNS ํ์ง ํ์ฑํ | `false` | |
| | `--mdns-domain` | mDNS ์๋น์ค์ ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ ์ด๋ฆ | `opencode.local` | |
| | `--cors` | ํ์ฉํ ์ถ๊ฐ ๋ธ๋ผ์ฐ์ origin | `[]` | |
|
|
| `--cors`๋ ๋ค์ ์๊ฐ์ ํต๊ณผ๋ ์ ์์ต๋๋ค: |
|
|
| ```bash |
| opencode serve --cors http://localhost:5173 --cors https://app.example.com |
| ``` |
|
|
| --- |
| |
| |
|
|
| `OPENCODE_SERVER_PASSWORD`๋ฅผ ์ค์ ํ์ฌ ์๋ฒ๋ฅผ HTTP Basic auth๋ก ๋ณดํธํฉ๋๋ค. `opencode` ๋๋ `OPENCODE_SERVER_USERNAME`๋ฅผ ์ค๋ฒ๋ผ์ด๋๋ก ์ค์ ํ๋ ์ฌ์ฉ์์ ๊ธฐ๋ณธ๊ฐ. ์ด๊ฒ์ `opencode serve`์ `opencode web` ๋ ๋ค์ ์ ์ฉํฉ๋๋ค. |
|
|
| ```bash |
| OPENCODE_SERVER_PASSWORD=your-password opencode serve |
| ``` |
|
|
| --- |
| |
| |
|
|
| `opencode`๋ฅผ ์คํํ๋ฉด TUI์ ์๋ฒ๋ฅผ ์์ํฉ๋๋ค. TUI๋ ์ด๋์ ์์ต๋๊น? |
| ์๋ฒ์ ๋ํํ๋ ํด๋ผ์ด์ธํธ. ์๋ฒ๋ OpenAPI 3.1 spec์ ๋
ธ์ถ |
| ๋์ . ์ด ์๋ํฌ์ธํธ๋ [SDK](/docs/sdk)์ ์์ฑํ๋ ๋ฐ๋ ์ฌ์ฉ๋ฉ๋๋ค. |
|
|
| :::tip |
| opencode ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ opencode programmatically์ ์ํธ ์์ฉํฉ๋๋ค. |
| ::: |
|
|
| ์ด ์ํคํ
์ฒ๋ opencode ์ง์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ฅผ ํ์ฉํ๊ณ opencode programmatically์ ์ํธ ์์ฉ ํ ์ ์์ต๋๋ค. |
|
|
| ๋
๋ฆฝ ์๋ฒ๋ฅผ ์์ํ๋ ค๋ฉด `opencode serve`๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋น์ ์ด ์๋ ๊ฒฝ์ฐ์ |
| opencode TUI ์คํ, `opencode serve` ์๋ก์ด ์๋ฒ๋ฅผ ์์ํฉ๋๋ค. |
|
|
| --- |
| |
| |
|
|
| TUI๋ฅผ ์์ํ๋ฉด ๋ฌด์์๋ก ํฌํธ์ ํธ์คํธ ์ด๋ฆ์ ํ ๋นํฉ๋๋ค. ๋์ `--hostname`์ `--port` [flags](/docs/cli)์์ ์ ๋ฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฒ์ ์ฐ๊ฒฐํ์ญ์์ค. |
|
|
| [`/tui`](#tui) ์๋ํฌ์ธํธ๋ ์๋ฒ๋ฅผ ํตํด TUI๋ฅผ ๊ตฌ๋ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฏธ๋ฆฌ ์์ฑํ๊ฑฐ๋ ํ๋กฌํํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด ์ค์ ์ opencode [IDE](/docs/ide) ํ๋ฌ๊ทธ์ธ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. |
|
|
| --- |
| |
| |
|
|
| ์๋ฒ๋ OpenAPI 3.1 spec์ ๊ฒ์ํฉ๋๋ค. |
|
|
| ``` |
| http://<hostname>:<port>/doc |
| ``` |
|
|
| ์๋ฅผ ๋ค์ด, `http://localhost:4096/doc`. ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ฒญ ๋ฐ ์๋ต ์ ํ์ ๊ฒ์ฌํ๋ spec๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋๋ Swagger ํํ๊ฐ์์ ๋ณผ ์ ์์ต๋๋ค. |
|
|
| --- |
| |
| |
|
|
| opencode ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ API๋ฅผ ๋
ธ์ถํฉ๋๋ค. |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ---------------- | ------------------------- | ------------------------------------ | |
| | `GET` | `/global/health` | ์๋ฒ ๊ฑด๊ฐ ๋ฐ ๋ฒ์ | `{ healthy: true, version: string }` | |
| | `GET` | `/global/event` | ๊ธ๋ก๋ฒ ์ด๋ฒคํธ(SSE ์คํธ๋ฆผ) | ์ด๋ฒคํธ ์คํธ๋ฆผ | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ------------------ | ----------------------- | --------------------------------------------- | |
| | `GET` | `/project` | ๋ชจ๋ ํ๋ก์ ํธ ๋ณด๊ธฐ | <a href={typesUrl}><code>Project[]</code></a> | |
| | `GET` | `/project/current` | ํ์ฌ ํ๋ก์ ํธ ๊ฐ์ ธ ์ค๊ธฐ | <a href={typesUrl}><code>ํ๋ก์ ํธ</code></a> | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ------- | ----------------------------- | ------------------------------------------- | |
| | `GET` | `/path` | ํ์ฌ ๊ฒฝ๋ก ๋ฐ๊ธฐ | <a href={typesUrl}><code>Path</code></a> | |
| | `GET` | `/vcs` | ํ์ฌ ํ๋ก์ ํธ์ VCS ์ ๋ณด ๋ฐ๊ธฐ | <a href={typesUrl}><code>VcsInfo</code></a> | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------ | ------------------- | -------------------- | --------- | |
| | `POST` | `/instance/dispose` | ํ์ฌ ์ธ์คํด์ค๋ฅผ ํด์ | `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------- | ------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | |
| | `GET` | `/config` | ๊ตฌ์ฑ์ ๋ณด | <a href={typesUrl}><code>Config</code></a> | |
| | `PATCH` | `/config` | ์
๋ฐ์ดํธ ๊ตฌ์ฑ | <a href={typesUrl}><code>Config</code></a> | |
| | `GET` | `/config/providers` | ๋ชฉ๋ก ์ ๊ณต์
์ฒด ๋ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ | `{ providers: `<a href={typesUrl}> ์ฌ์ดํธ ๋งต</a>`, default: { [key: string]: string } }` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------ | -------------------------------- | --------------------------- | ----------------------------------------------------------------------------------- | |
| | `GET` | `/provider` | ๋ชจ๋ ๊ณต๊ธ์ ๋ชฉ๋ก | `{ all: `<a href={typesUrl}>Provider[]</a>`, default: {...}, connected: string[] }` | |
| | `GET` | `/provider/auth` | ๊ณต๊ธ์ ์ธ์ฆ ๋ฉ์๋ ๊ฐ์ ธ์ค๊ธฐ | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` | |
| | `POST` | `/provider/{id}/oauth/authorize` | OAuth๋ฅผ ์ฌ์ฉํ ๊ณต๊ธ์ ํ๊ฐ | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> | |
| | `POST` | `/provider/{id}/oauth/callback` | ๊ณต๊ธ์๋ฅผ ์ํ OAuth ์ฝ๋ฐฑ | `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฉ์๋ | ๊ฒฝ๋ก | ์ค๋ช
| ๋น๊ณ | |
| | -------- | ---------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------- | |
| | `GET` | `/session` | ๋ชจ๋ ์ธ์
์ผ๋ํ | ๋ฐํ <a href={typesUrl}><code>Session[]</code></a> | |
| | `POST` | `/session` | ์ ์ธ์
๋ง๋ค๊ธฐ | ๋ชธ: `{ parentID?, title? }`, ๋ฐํ <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/status` | ๋ชจ๋ ์ธ์
์ ์ธ์
์ํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค | `{ [sessionID: string]: `<a href={typesUrl}>SessionStatus</a>` }` | |
| | `GET` | `/session/:id` | ์ธ์
์์ธ๋ณด๊ธฐ | ๋ฐํ <a href={typesUrl}><code>Session</code></a> | |
| | `DELETE` | `/session/:id` | ์ธ์
์ญ์ ๋ฐ ๋ชจ๋ ๋ฐ์ดํฐ | `boolean` | |
| | `PATCH` | `/session/:id` | ์
๋ฐ์ดํธ ์ธ์
์์ฑ | ๋ณธ์ฒด: `{ title? }`, ๋ฐํ <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/:id/children` | ์ธ์
์ ํ์ ์ธ์
| ๋ฆฌํด <a href={typesUrl}><code>Session[]</code></a> | |
| | `GET` | `/session/:id/todo` | ์ธ์
์ ํ ์ผ(Todo) ๋ชฉ๋ก ๋ฐ๊ธฐ | <a href={typesUrl}><code>Todo[]</code></a> | |
| | `POST` | `/session/:id/init` | ์ฑ ์ด๊ธฐํ ๋ฐ `AGENTS.md` ๋ถ์ | ๋ชธ: `{ messageID, providerID, modelID }`, ๋ฐํ `boolean` | |
| | `POST` | `/session/:id/fork` | ๋ฉ์์ง์ ๊ธฐ์กด ์ธ์
| ๋ชธ: `{ messageID? }`, ๋ฐํ <a href={typesUrl}><code>Session</code></a> | |
| | `POST` | `/session/:id/abort` | ์ด์ ์ค์ธ ์ธ์
| ๋ฐํ `boolean` | |
| | `POST` | `/session/:id/share` | ์ธ์
๊ณต์ | <a href={typesUrl}><code>Session</code></a> | |
| | `DELETE` | `/session/:id/share` | ์ธ์
๊ณต์ | <a href={typesUrl}><code>Session</code></a> | |
| | `GET` | `/session/:id/diff` | `/session/:id/diff` | `messageID?`, ๋ฐํ <a href={typesUrl}><code>FileDiff[]</code></a> | |
| | `POST` | `/session/:id/summarize` | ์ธ์
์ ์์ฝ | ๋ณธ์ฒด: `{ providerID, modelID }`, `boolean` ๋ฐํ | |
| | `POST` | `/session/:id/revert` | ๋ฉ์์ง ์ฌ์ | ๋ชธ: `{ messageID, partID? }`, ๋ฐํ `boolean` | |
| | `POST` | `/session/:id/unrevert` | ๋ฉ์์ง ๋๋๋ฆฌ๊ธฐ ์ทจ์ | ๋ฐํ `boolean` | |
| | `POST` | `/session/:id/permissions/:permissionID` | ํ๊ฐ ์์ฒญ ๋์ | ๋ณธ์ฒด: `{ response, remember? }`, `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์ฃผ | |
| | ------ | --------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| | `GET` | `/session/:id/message` | ์ธ์
์ ๋ชฉ๋ก ๋ฉ์์ง | ์ฟผ๋ฆฌ: `limit?`, `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}[]` | |
| | `POST` | `/session/:id/message` | ์๋ต์ ์ํด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๊ธฐ๋ค๋ฆฝ๋๋ค | ๋ชธ: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, ๋ฐํ `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `GET` | `/session/:id/message/:messageID` | ๋ฉ์์ง ๋ณด๋ด๊ธฐ | `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `POST` | `/session/:id/prompt_async` | ๋น๋๊ธฐ์ ์ผ๋ก ๋ฉ์์ง ๋ณด๋ด๊ธฐ | ๋ชธ: `/session/:id/message`์ ๋์ผ, `204 No Content`๋ฅผ ๋ฐํ | |
| | `POST` | `/session/:id/command` | ์ฌ๋์ ๋ช
๋ น์ด ์คํ | ๋ณธ์ฒด: `{ messageID?, agent?, model?, command, arguments }`, ๋ฐํ `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
| | `POST` | `/session/:id/shell` | shell ๋ช
๋ น ์คํ | ์ฒด: `{ agent, model?, command }`, ๋ฐํ `{ info: `<a href={typesUrl}>Message</a>`, parts: `<a href={typesUrl}>Part[]</a>`}` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ---------- | --------- | --------------------------------------------- | |
| | `GET` | `/command` | ๋ชจ๋ ๋ช
๋ น | <a href={typesUrl}><code>Command[]</code></a> | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ------------------------ | ---------------------------- | --------------------------------------------------------------------------------------- | |
| | `GET` | `/find?pattern=<pat>` | ํ์ผ์์ ํ
์คํธ ๊ฒ์ | `path`, `lines`, `line_number`, `absolute_offset`, `submatches`๊ฐ ํฌํจ๋ ์ผ์น ๊ฐ์ฒด ๋ฐฐ์ด | |
| | `GET` | `/find/file?query=<q>` | ์ด๋ฆ์ผ๋ก ํ์ผ/๋๋ ํฐ๋ฆฌ ์ฐพ๊ธฐ | `string[]` (๊ฒฝ๋ก) | |
| | `GET` | `/find/symbol?query=<q>` | ์ํฌ์คํ์ด์ค ์ฌ๋ณผ ์ฐพ๊ธฐ | <a href={typesUrl}><code>Symbol[]</code></a> | |
| | `GET` | `/file?path=<path>` | ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ ๋ชฉ๋ก | <a href={typesUrl}><code>FileNode[]</code></a> | |
| | `GET` | `/file/content?path=<p>` | ํ์ผ ์ฝ๊ธฐ | <a href={typesUrl}><code>FileContent</code></a> | |
| | `GET` | `/file/status` | ์ถ์ ์ค์ธ ํ์ผ ์ํ ๊ฐ์ ธ์ค๊ธฐ | <a href={typesUrl}><code>File[]</code></a> | |
|
|
| |
|
|
| - `query` (required) - ๊ฒ์ ๋ฌธ์์ด (fuzzy ์ผ์น) |
| - `type` (์ ํ ์ฌํญ) - `"file"` ๋๋ `"directory"`์ ์ ํ ๊ฒฐ๊ณผ |
| - `directory` (์ ํ ์ฌํญ) - ๊ฒ์์ ๋ํ ํ๋ก์ ํธ ๋ฃจํธ๋ฅผ ๋ฌด์ |
| - (์ ํ) `limit` - ์ต๋ ๊ฒฐ๊ณผ (1-200) |
| - `dirs` (์ต์
) - ๋ ๊ฑฐ์ ํ๋๊ทธ (`"false"`๋ ํ์ผ๋ง ๋ฐํ) |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ------------------------------------------- | ----------------------- | --------------------------------------------- | |
| | `GET` | `/experimental/tool/ids` | ๋ชจ๋ ๋๊ตฌ ID | <a href={typesUrl}><code>๋๊ตฌ</code></a> | |
| | `GET` | `/experimental/tool?provider=<p>&model=<m>` | ๋ชจ๋ธ์ฉ JSON ์คํค๋ง ๋ชฉ๋ก | <a href={typesUrl}><code>๋๊ตฌ ๋ชฉ๋ก</code></a> | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------ | ------------ | ---------------------- | -------------------------------------------------------- | |
| | `GET` | `/lsp` | LSP ์๋ฒ ์ํ | <a href={typesUrl}><code>LSPStatus[]</code></a> | |
| | `GET` | `/formatter` | ํ์์ ์ํ๋ฅผ ํ์ธ | <a href={typesUrl}><code>FormatterStatus[]</code></a> | |
| | `GET` | `/mcp` | MCP ์๋ฒ ์ํ๋ฅผ ์ป๋๋ค | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` | |
| | `POST` | `/mcp` | MCP ์๋ฒ๊ฐ ๋์ | ๋ณธ์ฒด: `{ name, config }`, MCP ์ํ ๊ฐ์ฒด๋ฅผ ๋ฐํ | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | -------- | ------------------------- | ----------------------------------------------- | |
| | `GET` | `/agent` | ์ด์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์์ด์ ํธ | <a href={typesUrl}><code> ์์ด์ ํธ[]</code></a> | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------ | ------ | ----------------------------------------------------- | --------- | |
| | `POST` | `/log` | ๋ก๊ทธ ์
๋ ฅ ๋ฐ๋: `{ service, level, message, extra? }` | `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ------ | ----------------------- | ----------------------------------------- | -------------- | |
| | `POST` | `/tui/append-prompt` | ํ๋กฌํํธ์ ํ
์คํธ๋ฅผ ๋ถ์ฌ | `boolean` | |
| | `POST` | `/tui/open-help` | ๋์๋ง ๋ํ ์ด๊ธฐ | `boolean` | |
| | `POST` | `/tui/open-sessions` | ์ธ์
์ ํ ์๋ด | `boolean` | |
| | `POST` | `/tui/open-themes` | ํ
๋ง ์ ํ ์๋ด | `boolean` | |
| | `POST` | `/tui/open-models` | ๋ชจ๋ธ ์ ํ ์๋ด | `boolean` | |
| | `POST` | `/tui/submit-prompt` | ํ์ฌ ํ๋กฌํํธ ์ ์ถ | `boolean` | |
| | `POST` | `/tui/clear-prompt` | ์ํํธ ํด๋ฆฌ์ด | `boolean` | |
| | `POST` | `/tui/execute-command` | ๋ช
๋ น์ด ์คํ(`{ command }`) | `boolean` | |
| | `POST` | `/tui/show-toast` | ์ผ ํ ์คํธ(`{ title?, message, variant }`) | `boolean` | |
| | `GET` | `/tui/control/next` | ๋ค์ ์ปจํธ๋กค ์์ฒญ ์ ๊ธฐ๋ค๋ฆฌ๊ณ | ์ ์ด ์์ฒญ ๊ฐ์ฒด | |
| | `POST` | `/tui/control/response` | ํต์ ์์ฒญ(`{ body }`) ๋์ | `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ----------- | --------------------------------------------------- | --------- | |
| | `PUT` | `/auth/:id` | ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช
๋ชธ์ ๊ณต๊ธ์ ์คํค๋ง๋ฅผ ์ผ์นํด์ผ ํฉ๋๋ค | `boolean` | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | -------- | ------------------------------------------------------------------------------- | ------------------------ | |
| | `GET` | `/event` | ์๋ฒ ์ ์ก ์ด๋ฒคํธ ์คํธ๋ฆผ. ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ๋ `server.connected`, ๊ทธ ํ ๋ฒ์ค ์ด๋ฒคํธ | Server-sent event stream | |
|
|
| --- |
| |
| |
|
|
| | ๋ฐฉ๋ฒ | ๊ฒฝ๋ก | ์ค๋ช
| ์๋ต | |
| | ----- | ------ | ---------------- | ------------------------ | |
| | `GET` | `/doc` | OpenAPI 3.1 ์ฌ์ | HTML ํ์ด์ง OpenAPI ์ฌ์ | |
|
|