https://github.com/narumincho/http-server
https://github.com/narumincho/http-server
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/narumincho/http-server
- Owner: narumincho
- License: mit
- Created: 2025-01-31T11:24:37.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-31T06:32:38.000Z (about 1 year ago)
- Last Synced: 2025-05-31T13:33:44.388Z (about 1 year ago)
- Language: TypeScript
- Size: 88.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# http-server
[](https://jsr.io/@narumincho/http-server)
[Hono](https://github.com/honojs/hono) や
[Elysia](https://github.com/elysiajs/elysia) とは違い,
メソッド記法ではなく純粋な関数を組み合わせて作る, 型がついたHTTP サーバー
Deno を使って開発中. まだ機能不足
```ts
import {
body,
createHandler,
json,
operation,
query,
requestHeader,
response,
} from "jsr:@narumincho/http-server";
import {
createOpenApi,
createOpenApiOperation,
} from "jsr:@narumincho/http-server/openApi.ts";
import { createRedocOperation } from "jsr:@narumincho/http-server/redoc.ts";
import { createScalarOperation } from "jsr:@narumincho/http-server/scalar.ts";
const operations: Parameters["0"]["operations"] = [
operation.get({
path: "/items",
description: "アイテムを一覧で取得します",
queryParameters: {
filter: query.optional({
description: "フィルターのパラメーター",
queryItemType: query.string(),
example: "a",
}),
withDetail: query.optional({
description: "",
queryItemType: query.boolean(),
example: false,
}),
sampleRequired: query.required({
description: "必須パラメーター テスト",
queryItemType: query.string(),
example: "サンプル必須!",
}),
},
requestHeaders: [
requestHeader.required(requestHeader.authorizationBearer({}), {}),
],
responses: [
response.ok({
description: "取得結果を返します",
headers: [],
content: [
body.applicationJson(json.array(json.object({
name: json.string(),
}))),
body.applicationOctetStream(),
],
}),
],
// deno-lint-ignore require-await
handler: async ({ pathParameters, queryParameters, response }) => {
console.log(pathParameters, queryParameters);
return response["200"]({}, "application/json", [{ name: "" }]);
},
}),
operation.post({
path: "/items",
queryParameters: {},
responses: [response.ok({
headers: [],
description: "結果を返します",
content: [
body.applicationJson(json.object({
wip: json.string(),
})),
],
})],
// deno-lint-ignore require-await
handler: async ({ pathParameters, queryParameters, response }) => {
console.log(pathParameters, queryParameters);
return response["200"]({}, "application/json", { wip: "123" });
},
}),
operation.get({
path: "/items/:id",
queryParameters: {
withDetail: query.optional({
description: "詳細情報も取得するかどうか",
queryItemType: query.boolean(),
example: false,
}),
},
responses: [response.ok({
headers: [],
description: "結果を返します",
content: [
body.applicationJson(json.object({
wip: json.string(),
})),
],
})],
// deno-lint-ignore require-await
handler: async ({ pathParameters, queryParameters, response }) => {
console.log(pathParameters, queryParameters);
return response["200"]({}, "application/json", { wip: "123" });
},
}),
operation.patch({
path: "/items/:id",
responses: [response.ok({
headers: [],
description: "結果を返します",
content: [
body.applicationJson(json.object({
wip: json.string(),
})),
],
})],
// deno-lint-ignore require-await
handler: async ({ pathParameters, queryParameters, response }) => {
console.log(pathParameters, queryParameters);
return response["200"]({}, "application/json", { wip: "123" });
},
}),
operation.delete({
path: "/items/:id",
responses: [response.ok({
headers: [],
description: "結果を返します",
content: [
body.applicationJson(json.object({
wip: json.string(),
})),
],
})],
// deno-lint-ignore require-await
handler: async ({ pathParameters, queryParameters, response }) => {
console.log(pathParameters, queryParameters);
return response["200"]({}, "application/json", { wip: "123" });
},
}),
createOpenApiOperation({
path: "/openapi",
// deno-lint-ignore require-await
handler: async ({ response }) =>
response["200"](
{},
"application/json",
createOpenApi({
info: {
title: "@narumincho/http-server example",
version: "0.0.1",
},
operations,
}),
),
}),
createRedocOperation({ path: "/redoc", openApiPath: "/openapi" }),
createScalarOperation({ path: "/scalar", openApiPath: "/openapi" }),
];
Deno.serve(
createHandler({
operations,
}),
);
```