首页 > 解决方案 > 真正严格类型化的 API 工作流 - 如何编写健壮的 API?

问题描述

我尝试了很多不同的工具和框架,我想使用一些东西。真正严格地使用 Nodejs 和 Typescript 键入,但似乎什么都不是?

例如,路由系统:

我尝试过 Meteor 和 NestJS 之类的框架,这些框架真的很难扩展,如果缺少某个功能,你将永远无法在保持所有类型的同时在其之上开发一些东西。

我已经掌握了 Nuxt、Next 和 Sapper 等框架。但是没有任何东西是真正输入的,或者以一种奇怪的方式。

所以我选择了 Express JS,我可以输入自己的路线并编写自己的方法和类来扩展它。这比我以前尝试过的任何其他方法都容易。

但路由系统只是工作 API 的一部分。现在我需要将我的路线与我的数据库链接起来,当然,我需要随身携带一个 ORM。但是事件 TypeORM 或 Sequelize-Typescript 并不是真正类型化的。sequelize-typescript 中的“”等某些方法User.create({//Not typed})不提供自定义类型来帮助我填写此方法。

而在ORM之后,将轮到身份验证、数据输入,甚至是客户端。

Typescript 很棒,但是所有“使用 typescript”的东西仍然会有一些动态数据层,需要在编写代码时手动检查。

你怎么处理这个?当您制作应用程序时,您是否总是在辅助屏幕中检查您的类型和接口?当您需要在界面中添加新字段时,您如何跟踪使用它的应用程序的每个部分(路由、客户端、数据库、验证)?

我只是不想开始编写我的 API 却发现很难修改、改进或调试(我可能会有超过 25 个实体,它们之间有超过 100 个关系)。

标签: node.jstypescriptapirest

解决方案


您可以通过定义模型并将其包含在架构定义中来使您的 TypeORM 实体类型安全(来自:https ://typeorm.io/#/separating-entity-definition )

import {EntitySchema} from "typeorm";

export interface Category {
    id: number;
    name: string;
}

export const CategoryEntity = new EntitySchema<Category>({
    name: "category",
    columns: {
        id: {
            type: Number,
            primary: true,
            generated: true
        },
        name: {
            type: String
        }
    }
});

推荐阅读