grape是一个基于rack的REST-like APIs,可以通过petstore.swagger.io可视化测试接口,
除了交易的接口数据需要加密,别的数据比如帮助文档不加密也无所谓
同样是交易所的MXC抹茶网的交易页面全是明文传输,信息很不安全
所以希望我们自己的交易所能通过websocket加密传输再由前端解密
所以我们就要用grape编写ws或binary frame的接口
ab命令全称是apache HTTP server benchmark
用于测试网页性能, 我们来比较下rails和rack的性能
rack是ruby最简单的HTTP服务器组件, 咱们来跑跑分看看
ab命令的语法格式:
ab -n 100 -c 10 http://127.0.0.1:3000/wallets/1278
!> mac的ab命令要用127.0.0.1不能用localhost
-n 表示总共有100个请求, -c 表示并发的请求数(concurrency)
ab的测试结果主要是看 Time per request: (mean, across all concurrent requests)
我们的rails的测试结果是平均8.4ms完成一个请求,接下来看看最轻量的rack速度如何
# Gemfile 1st edit
source 'https://gems.ruby-china.com'
ruby '2.5.0'
gem "rack", "2.0.7"
bundle
bundle list
* bundler (2.0.2)
* rack (2.0.7)
git init
git remote add origin https://github.com/daydayup-beijing/aoxiang_manager.git
git remote -v # check remote server
git add .
git commit -m "新建Gemfile并通过Gemfile安装rack"
git push
# config.ru 1st edit
run Proc.new { |env| ['200', {'Content-Type' => 'text/html'}, ['hello rack']] }
bundle exec rackup config.ru -p 3333
ab测试显示该接口平均0.7ms完成一个请求
git commit -m "添加了config.ru, 测试了rackup"
# Gemfile 2st edit
source 'https://gems.ruby-china.com'
ruby '2.5.0'
gem "rack", "2.0.7"
gem "grape", "1.2.4"
gem "mysql2", "0.5.2"
gem "activerecord", "6.0.0"
LoadError: cannot load such file -- app/models/order.rb
解决方案: app前面加个 ./
结果显示grape需要54ms才能完成一个带读取数据库的请求
由于grape没有自带serve功能,所以网上的教程差异都很大
项目用的开发环境是ruby:2.6.1 bundle:2.0.2
!> rbenv安装一个新的ruby版本时需要重新安装bundle
gem install bundler:2.0.2
- cp config/database.yml.example config/database.yml
- vim config/database.yml
- bundle exec guard -d
grape-swagger
在以下两个文件中实现了swagger的定义
- Gemfile,12:gem 'grape-swagger'
- app/api.rb,5: add_swagger_documentation(
启动服务器后在 http://localhost:4000/api/v2/swagger_doc 图形化查看接口
ruby的module名和文件夹名一定要对应上
对应关系为 module_name.underscore = folder_name