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 风格的后端服务

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程