【发布时间】:2018-11-25 00:00:34
【问题描述】:
使用 TypeScript、JavaScript、Java 或其他任何类中的类来处理 API 响应的最专业方法是什么?
例如,一个应用程序需要三个资源:
- 帐户(API:/account/:id)
- 汽车(API:/account/:id/cars/[:id])
- 驱动程序(API:/account/:id/cars/:id/drivers)
每个帐户都有一个或多个汽车,每个汽车都有一个或多个Driver。
我在我的应用程序中看到了两种处理这些资源的方法:
-
为每个资源(帐户、汽车、司机)创建一个类并嵌套它。例如。
class Account { constructor( public id: number, public name: string, public age: number public cars: Car[] ) {} } class Car { constructor( public id: number, public type: string, public seats: number public drivers: Driver[] ) {} }在这种情况下,API 将返回一个已经嵌套的 JSON 响应,并且只需要请求一次数据。
-
为每个资源创建一个类但不要嵌套它。首先只获取帐户数据(调用 /account/1234),然后在应用程序生命周期的后期获取司机(如果需要)和汽车(如果需要)。
class Account { constructor( public id: number, public name: string, public age: number ) {} } class Car { constructor( public id: number, public type: string, public seats: number ) {} }在这种情况下,API 将为每个 API 调用仅返回主要资源数据。
那么资源是否应该始终嵌套在整个应用程序上并仅在一次调用,或者资源类是否应该存在并在应用程序中相互独立地重新加载?专业程序员使用哪种方式?
【问题讨论】:
-
为什么首先需要创建类?您打算向他们添加什么行为?如果您不打算添加方法,则这些类并不是必需的;你最好为资源定义 TypeScript 接口。
-
你的问题内容与 Angular 班级组织无关。您要问的是 API 设计;你在 Angular 中的 DTO 类/接口应该反映你从后端得到的东西。
-
这是模棱两可的。在设计时,您还必须考虑如何使用数据以及数据集在一次点击中可能有多大。嵌套在小型数据集上会很好,但如果数据集总是很大,你不会想这样做。(想想网络流量,然后乘以可能使用你网站的用户数量)。
-
这只是一个意见。我喜欢在服务器(而不是在客户端)中进行艰苦的工作,所以,我的第一个方法是 API 返回嵌套类。但是您可以需要在您的应用程序中查看所有汽车或所有司机。根据数据的大小,会有一个嵌套类的服务。好吧,我们说的是类(使用接口,因为你不需要对象的方法,只需要数据)
标签: javascript angular api class structure