# Jacket_all **Repository Path**: mySpaceHome_tonly_pam/jacket_all ## Basic Information - **Project Name**: Jacket_all - **Description**: 在harmony项目上的一层请求方法的封装,基于方法调用和装饰器调用,开发者可以自行选择HTTP请求库进行实现。 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-09-27 - **Last Updated**: 2025-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Jacket 就像它的名字一样,薄薄的一层🧥,它只是定义了一层http的请求接口,本质上没有底部实现。 虽然如此,内部还是内置了一个叫做`NormalJacketImplment`的基于 `@kit.NetworkKit.http`的实现,可以给开发者偷懒。但是更希望的是,最终的调用由开发者实现。 ## 快速上手 ### A. 工具类调用 你可以通过传统的工具类方式调用,比如这样: ```typescript Text("Send a GET Request") .buttonSame() .onClick(() => { this.showColorToast(Color.White, SUCCESS_COLOR, "send a get request.") // 普通的请求方式 Jacket.request({ url: "https://api.github.com/repos/Microsoft/TypeScript", requestMethod: RequestMethod.GET }).then(resp => { if (resp.status != 200) { this.showColorToast(Color.White, ERROR_COLOR, "error " + resp.body) return } this.message = resp.body! }) }) ``` ### B. 注解方法调用 或者专业一点,结构化一下,抽取出一个业务的请求定义 ```typescript /** * 对接的后端api服务接口 */ import { GetRequest, PathVariableMap, RequestService, JacketResponseCallback, ResponseCallbackMark } from 'jacket'; @RequestService("github-api") export class MyServiceApis { /** * 获取信息接口 * @param pv1 路径参数1 * @param pv2 路径参数2 * @param callback 回调 */ @GetRequest("/repos/{pathVariable1}/{pathVariable2}") getRepos( @PathVariableMap("pathVariable1") pv1: string, @PathVariableMap("pathVariable2") pv2: string, @ResponseCallbackMark callback: JacketResponseCallback ): void { } } ``` 这时候你可能会问:“没有方法体我怎么调啊?😔”。其实没啥问题, 因为方法的实现是生成的,过程跟**A.工具调用**没啥区别。 响应的结果最终是通过`@ResponseCallbackMark`的那个 回调参数进行处理的。看看使用流程大概就明白了。🙂 ```typescript Text("Send a GET Request by decorators") .buttonSame() .onClick(() => { this.showColorToast(Color.White, SUCCESS_COLOR, "send a get request.") // 注解的请求方式 this.myService.getRepos("Microsoft", "TypeScript", resp => { // 回调处理 if (resp.status != 200) { this.showColorToast(Color.White, ERROR_COLOR, "error " + resp.body) return } this.message = resp.body! }) }) ``` 就是这么简单,如果还想直到更多,就继续往下阅读文档吧! # 实现和初始化 # 后端服务管理 # 装饰器说明 ## 类装饰器 ### 后端服务装饰器 **@RequestService** 需要声明在一个类之上,表示该类中的所有成员方法都会发送到该后端服务。装饰器需要一个参数 `serviceName: string`, 表示对应的后端服务。在调用该类的方法前,请务必注册该服务映射到`Jacket` 工具类中(参考后端服务管理👆)。 ## 方法装饰器 ### 请求方法装饰器 **@GetRequest** **@PostRequest** **@PutRequest** **@DeleteRequest** 需要声明在一个类中的成员方法之上,用于指定该请求方法的method属性。装饰器构造方法需要一个参数 `uri: string`,支持路径变量 ## 参数装饰器 ### 路径参数映射 **@PathVariableMap** 声明在一个方法的形参中,该方法调用后会用该装饰器修饰的实参去替换对应`uri`的路径变量,装饰器 构造方法需要一个参数`key: string`,指明替换的路径参数(路径参数写法: `{` + `路径参数key` + `}`, 例如: `/books/delete/{bookId}`) ### 请求体装饰器 **@RequestBody** 声明在一个方法的形参上,用于标记一个请求体参数,调用方法后将被装饰的实参作为请求体附着在请求中 没有参数。 ### 响应回调装饰器 **@ResponseCallbackMark** 声明在一个方法的形参上,用于标记一个响应回调,待请求响应后执行。该形参类型一定需要是`JacketResponseCallback` 的类型,否则可能无法回调成功。 休息一下,过一段时间再写...