开源项目 [开源] XJZProxy - 使用 Ruby 做三平台的 GUI 开发

xjz19901211 · 2019年08月02日 · 最后由 DeNa 回复于 2019年11月20日 · 11044 次阅读
本帖已被管理员设置为精华贴

先简单的说说开发经历吧。

项目总共我大概花了两个月的工作日时间吧。说说比较折腾的事情:

  • 协议细节具体没啥好说的,主要是花很多时间去了解协议具体细节。
  • 发布像编译程序一样安装运行的程序,由于我使用的 ruby 2.6.3,还支持了三平台 (Mac, Linux, Win10) 。为了让程序可以像其它编译语言一样的运行使用,在基于前人老项目的基础上,折腾了不少时间。由其是 Windows,花了几天折腾折腾,最后虽然可以运行了,但启动速度不是一般的慢。了解了下,发现是 Ruby 没对 Windows 平台做啥优化,所以虽然进行了一些简单的优化,但启动速度还是要十来秒。。。Windows 上的 Ruby 实在太慢了
  • GUI 还是研究了下,最后还是简单起见,直接使用 webview 了,使用别的 webview 库。
  • 兴趣原因就研究了下代码的加密和防破解,其实就自己编码一下,然后随便压缩一下,再加点无用字节。读取时直接使用 c 编写了 c 库去读。不过 c 代码库没做加密了。也就简单防防不会破解的人了。然后编译时在代码中加入随机的证书检查代码。。

本来想要想试试有没有感兴趣的人,然后做付费的。但后来,因为没啥人用,然后自己也懒的去推广了。其实之前做这个主要是想用 Ruby 折腾下不同的东西(Web 做烦了。。)

项目地址 https://github.com/xiejiangzhi/xjzproxy

好了,下面复制自项目介绍

项目介绍

官网 https://xjzproxy.xjz.pw/zh-cn/

主要功能

  • 本地 API Mock 基于 YAML 文档,支持动态数据生成
  • 自动生成、导出 API 文档
  • 自动基于文档对比 API 请求响应数据格式,提前发现有问题的接口
  • 根据请求历史生成统计数据
  • HTTP/HTTPS/HTTP2/GRPC 代理

想要解决的问题

通过为了方便合作,在需求确定后,我们会先写一份接口文档给前端,然后前端按文档定义的接口去开发。

在这期间我们可能会遇见很多问题:

  1. 结构松散或是没有结构的文档格式,很难去管理、协作,写起来也麻烦
  2. 只有文档,自己 mock 各种数据很麻烦,等真实接口好了才方便开发
  3. 请求参数格式没按文档来,在个例下正常工作,到复杂的线上就出问题了
  4. 后端接口没有文档格式来,在特定情况下前端没有处理而出问题
  5. 接口改了,但文档没改,久而久之,文档形同虚设

解决方案

  1. 使用 YAML 书写结构化的文档,数据结构可以复用。一个接口甚至可以简单到只需要几行
  2. 文档完成后,你就相当于有了一个本地的后端服务器,文档中所有接口可以直接调用
  3. 在请求文档接口时,我们会按文档检查请求参数是否与文档定义一致。遇到不匹配的将会有相应提示
  4. 在连接上真实服务器时,我们会帮助你检查数据的返回格式是否与文档定义一致。遇到不匹配的将会有相应提示
  5. 以上方式让文档主动参与到开发中,将督促使用者去更新文档

Example

一个最简单的项目文档示例

project:
  host: mydomain.com

apis:
  - title: Get a user
    method: GET
    path: /api/v1/users/\d+
    response:
      success:
        http_code: 200
        data:
          id: 1
          name: .t/name

然后就可以通过文档代理来访问了

$ curl http://mydomain.com/api/v1/users/123 --proxy localhost:9898
{"id": 1, "name": "random name"}

当然,你可以在移动设备、浏览器中通过代理地址访问接口。更多文档书写帮助请参考这里

请求参数和文档对不上时,会有提示 error_params

GRPC

如果你在使用 GRPC 的话,只要配置好 protobufs 的路径,就可以直接调用接口了。当然,如果你想定制 GRPC 接口返回的数据内容,还是需要在文档中定义好一些数据模板。

Preview

在工具中查看渲染好的漂亮文档也是不能少的。

doc_preview

jasl 将本帖设为了精华贴。 08月03日 20:54

GUI 不用 webview 会如何

@zzz6519003 不用 webview 也有其它的方案,写起来更麻烦而已。

使用体验上感觉差不了多少(IE 内核除外),另外现在使用的这个 webview 库也是基于原生 GUI,也可以自己去扩展一把定制的功能。

大家让一让,我有阿里云华为云腾讯云的服务器,目前可以送华为云一个月的使用,有需要 V 我 aliyun-cz

求大牛联系方式,如果不方便的话也可以加我微信呢,13916522840~上市公司招募 ruby 专家~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号