Fitted
0.1.7
使用 ECMAScript 装饰器(当前为第 2 阶段提案)执行 HTTP 请求并管理响应处理,这是管理数据如何流经应用程序网络层的简单易读的方式。
两个主要部分,实际执行请求的方法装饰器,以及允许您处理来自服务器的响应的转换和处理方式的类装饰器。
最简单的示例只是从 JSON 端点获取数据:
import { get } from 'fitted' ;
class HackerNews {
@ get ( 'https://hacker-news.firebaseio.com/v0/topstories.json' )
topstories ( request , response ) {
return request ( { } , response ) ;
}
}
并获取:
const hackerNews = new HackerNews ( ) ;
const topstories = await hackerNews . topstories ( ) ;
console . log ( topstories ) ;
基本要求
使用get
装饰器你可以触发GET
请求:
import { get } from 'fitted' ;
class HackerNews {
@ get ( 'https://hacker-news.firebaseio.com/v0/topstories.json' )
topstories ( request , response ) {
return request ( { } , response ) ;
}
}
合并参数
为了将 params 与 url 合并,我们使用 url-template,它使用大括号封装要合并的变量。
import { get } from 'fitted' ;
class HackerNews {
@ get ( 'https://hacker-news.firebaseio.com/v0/item/{id}.json' )
item ( id , request , response ) {
return request ( {
template : {
id : 123
}
} , response ) ;
}
}
基本网址
大多数时候,您的端点将共享相同的基本 url,因此 Fitted 允许您设置一个基本 url,该基本 url 将作为方法装饰器中设置的所有路径的前缀。
import { base , get } from 'fitted' ;
@ base ( 'https://hacker-news.firebaseio.com/v0/' )
class HackerNews {
@ get ( 'item/{id}.json' )
item ( id , request , response ) {
return request ( {
template : {
id : 123
}
} , response ) ;
}
}
发送数据
要将数据添加到post
、 put
和destroy
请求并为get
请求指定查询字符串,您需要将data
对象添加到请求定义中。
import { put } from 'fitted' ;
class HackerNews {
@ put ( 'https://hacker-news.firebaseio.com/v0/item/{id}.json' )
item ( id , name , request , response ) {
return request ( {
template : {
id : 123
} ,
data : {
name : name
}
} , response ) ;
}
}
要求装饰
通常,所有端点都有相同的请求要求,例如,要求所有端点都设置一些标头。为此,可以使用@request
装饰器。它将获取传递的每个请求的配置,然后将其交给驱动程序。
import { get , request } from 'fitted' ;
const myRequestHandler = config => {
config . headers = {
'accept' : 'application/json'
}
return config ;
}
@ request ( myRequestHandler )
class HackerNews {
@ get ( 'item/{id}.json' )
item ( id , request , response ) {
return request ( {
template : {
id : id
}
} , response ) ;
}
}
响应处理
当服务器响应包含application/json
Content-Type
标头时,Fitting 会自动将其提供给JSON.parse
函数,以便生成的 Promise 将输出相应的对象。
任何其他Content-Type
将导致抛出错误并要求您实现自己的处理程序。
自定义响应处理器
当您的端点返回需要一些预处理的内容时,您可以在 api 定义中为所有端点定义一个处理器。它由一个函数组成,该函数接收来自服务器的响应并将解析后的数据传递给响应对象。
import { get , processor } from 'fitted' ;
const myProcessor = response => {
const data = JSON . parse ( response . getBody ( ) ) ;
response . setBody ( data ) ;
return data ;
}
@ processor ( myProcessor )
class HackerNews {
@ get ( 'item/{id}.json' )
item ( id , request , response ) {
return request ( {
template : {
id : id
}
} , response ) ;
}
}