[Ruby on Rails 相关] Camille:让前端和 Rails 进行类型安全的通信

查看 16|回复 0
作者:mizuhashi   
Github Repo: https://github.com/onyxblade/camille
用 Rails 做 API server 的时候,我们返回的 json 是没有经过类型检查的,这样即使前端用上了 typescript ,我们也不能保证 Rails 返回的 JSON 是预期的结构和类型。于是我做了这个 gem 来在 Rails 端定义 API 接口的类型,并生成 ts 的调用函数,这样调用的参数和返回就都是类型安全的了。
简而言之它的作用就是可以给 controller action 的 params 和 response 加上类型,例如对一个books#create action ,可以通过下面的代码加上类型:
using Camille::Syntax
class Camille::Schemas::Books
然后可以生成前端的调用函数:
// This file is automatically generated.
import request from './request'
export type DateTime = string
export type Decimal = number
export default {
  books: {
    create(params: {book: {name: string, author: string, retailPrice: Decimal}}): Promise[b]{ return request('post', '/books/create', params) },
  },
}
这样前端可以通过下面的方式调用:
const bool = await endpoints.books.create({
  book: {
    name: 'Metaprogramming Ruby',
    author: 'Paolo Perrotta',
    retailPrice: 27.95
  }
})
这个调用的参数和返回值都是类型安全的,如果前端出错了 TS 会给出提示,后端出错则会被运行时检查查出来。同时请求的 path 也是不需要程序员管理的,程序员只要调用函数就好,Camille 会确保请求被正确的 action 处理。
https://github.com/onyxblade/camille-tutorial 这里有一个 step by step 的 tutorial ,感兴趣的也可以看看。
Camille 目前做到了支持 typescript 的除了 enum 和 utility types 的绝大部分类型语法( utility types 支持 omit 和 pick ),基本是一模一样的,在这个过程中用到了至今还没见有人用过的 refinement ,算是比较好玩的一点。具体的语法列表可以参见 https://github.com/onyxblade/camille#available-syntax-for-types 。
欢迎试用和反馈,如果有需要的 feature requests 也可以加上。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部