Koa+Typescript超简单的Restful API

引言

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

以上内容为koa官方简介译文,但不得不说koa的设计理念和性能的优异性,本文重点讲的是类似koatty 的开源仓库 koa-restful。虽然类似但完全是两种不同的设计理念,koatty大而全,但学习成本和约束比较大,但也相对灵活。koa-restful小而美,仅关注于核心的restful风格Api,并提供依赖注入的能力,其余的能力由更专注的模块提供来实现自由组合。比如:art-template模板引擎来实现页面渲染,typeorm来实现数据库访问读写,以及更多的优秀的开源仓库来帮助你实现各种业务。而koa-restful的依赖注入能力(DI)让你的各个模块可以顺畅衔接,你也可以使用设计模式控制反转来达到插件化运行的目的。

设计理念

解决了javascript弱类型语音不支持反射的问题,通用typescript助力node实现DI的能力,来达到和java、C#等强类型语言一样的能力。在加上js现如今最强大的生态,node的起飞尽在眼前。

轻量 、高效 、易用。

轻量:依赖官方koa,通过use插件的形式注入KoaRestful框架,即可直接运行不需要复杂的规则。

高效:支持瞬态实例和单例控制器,极度精简的核心代码,让你的应用实现低内存的占用。

易用:简单的几个装饰器即可实现一个Api,比如:

javascript 复制代码
// 创建路由控制器
export declare function Controller(route?: string, lifecycle?: Lifecycle): ClassDecorator;

// 创建Restful请求方法
export declare function HttpGet(route?: string): MethodDecorator;
export declare function HttpHead(route?: string): MethodDecorator;
export declare function HttpOptions(route?: string): MethodDecorator;
export declare function HttpPost(route?: string): MethodDecorator;
export declare function HttpPut(route?: string): MethodDecorator;
export declare function HttpPatch(route?: string): MethodDecorator;
export declare function HttpDelete(route?: string): MethodDecorator;


// 从请求中读取数据
export declare function FromQuery(name: TParam, converter?: ParameterConverterType): ParameterDecorator;
export declare function FromHeader(name: TParam, converter?: ParameterConverterType): ParameterDecorator;
export declare function FromRoute(name: TParam, converter?: Extract<ParameterConverterType, "str" | "num">): ParameterDecorator;
export declare function FromBody(options?: BodyParserOptions): ParameterDecorator;

// 依赖注入(DI)
export declare function Dependency(opts?: DependencyOptions): ClassDecorator;
export declare function AddDependency(dep: Object, opts?: Pick<DependencyOptions, "uniqueId" | "alias">): void;
export declare function Injection(opts?: { uniqueId: string; }): PropertyDecorator;

使用流程

  • NPM依赖
bash 复制代码
# 安装 koa 和 koa-restful
npm install koa @wangminghua/koa-restful

创建index.ts(入口点程序)

less 复制代码
import {
  BaseController,
  Controller,
  FromQuery,
  FromRoute,
  HttpGet,
  KoaRestful,
} from "@wangminghua/koa-restful";
import Koa from "koa";

// 创建一个控制器
@Controller()
class TestController extends BaseController {

  // 创建一个请求,并读取url查询参数,和路径查询参数
  @HttpGet("GetTestParameter/:id")
  GetTestParameter(
    @FromRoute("id") id: string,
    @FromQuery("name") name: string
  ) {
    this.http.ok(`路径参数ID = ${id} 查询参数NAME = ${name}`);
  }
}

const app = new Koa();
app.use(KoaRestful({ logs: true })); // 使用 KoaRestful 插件
app.listen(3000); // 创建 http://localhost:3000
  • 通过npx tsc 命令编译index.ts到dist中,然后执行node ./dist/index.js

源码仓库demo运行示例

在线测试(demo)

传送门 「链接」

传送门(github)

GitHub - WangMingHua111/koa-restful: Koa Restful 是一个基于 Koa 框架的 Restful Web API 插件开源库,使用 TypeScript 构建。它旨在提供一种轻量、高效、易用的方式来构建 RESTful 风格的后端服务

相关推荐
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路4 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x5 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn6 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈7 小时前
AI 读你的提示词,其实很没耐心
后端
用户8356290780518 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我123458 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒8 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记8 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk598788 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端