V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
yetrun
V2EX  ›  分享创造

分享一下最近新写的 Web API 框架

  •  
  •   yetrun · 2022-09-14 16:55:36 +08:00 · 2005 次点击
    这是一个创建于 560 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在这个主题下发布应该没错吧。

    零零总总写了有半年了,虽然现在并不是一个发布的好时机,但是想要先分享出来和大家伙交流一下想法。本来打算先在公司用起来的,不过最近公司没有什么新项目,老项目我也不想换框架了,人力物力呀…… 所以只在自己的个人项目下应用了,目前运转良好。

    又是一个轮子,只不过有些不一样的地方。

    首先,思想上它是完全面向 API 文档的。也许好多团队写文档会借助于 YAPI 这样的第三方工具,或者直接用 Postman 这样用用例来说话,再不济手写 Markdown. 我在框架里直接生成了 OpenAPI 的规格文档,在开发者实现接口的同时,文档就生成了。例如像下面这样定义一个接口,同时文档就能生成了:

    route('/users', :post)
      .title('创建一个新用户')
      .params {
        param :user, type: 'object', using: UserEntity
      }
      .do_any {
        # 这里实现你的业务逻辑 ...
      }
      .if_status(201) {
        expose :user, type: 'object', using: UserEntity
      }
    

    其次,这次将参数和返回值的写法统一起来了。像上面,我们只用了一个 UserEntity,就可以同时定义参数和返回值了,再也不用写两遍了。你的 UserEntity 内部可能是这样写的:

    class UserEntity
      property :id, type: 'integer', param: false # 只返回
      property :password, type: 'string', render: false # 只用作参数
      property :name, type: 'string,
      property :age, type: 'integer'
    end
    

    其他的功能还有很多,就不想一一列举了。想进一步了解的,可以去看 GitHub 仓库:

    https://github.com/yetrun/web-frame

    这个框架适合纯 API 后端的场景,即前后端分离。也比较适合团队,基本用一种固定的写法构建 API. 重点是生成对应的文档,前后端不再扯皮(你的文档是这么定义的,怎么你返回的数据是长这样啊之类的云云)。

    说实话最近整体的工作节奏都有些慢,受大环境的影响吧。本来打算等到我稳定运行后再发布了,但是这可能还要一阵子,就先预先发布一下看看反馈再说。现在大家运行起来可能有点吃力,因为还缺一个项目脚手架,后面会补上。

    如果觉得对你有用,还望支持一下,对我回复个 +1. 如果大家热情足够的话,因为涉及到文档,我感觉上手难度还是有的,到时会建个 QQ 群或微信群做全面的答疑。如果大家热情不高,我就当成一个小众项目在我的团队里使用吧。视反馈而定。

    4 条回复    2022-09-18 12:20:37 +08:00
    Vegetable
        1
    Vegetable  
       2022-09-14 17:10:53 +08:00
    省流:Ruby 写的
    lizhenda
        2
    lizhenda  
       2022-09-15 14:46:10 +08:00
    Ruby 的优势是啥?
    magicdawn
        3
    magicdawn  
       2022-09-16 16:27:09 +08:00
    ruby 的优势: make programmers happy
    yetrun
        4
    yetrun  
    OP
       2022-09-18 12:20:37 +08:00
    我忘记声明是 Ruby 写的了,貌似这种语言不被大众接受。对于写这种领域驱动( DSL )的框架,用 Ruby 较容易实现。另外一种可选项是 Groovy.

    先做个调研吧,如果用 Groovy 实现框架,可结合 Java 应用,可接受度是不是更高一点。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5479 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:22 · PVG 16:22 · LAX 01:22 · JFK 04:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.