解决 Docker 依赖持久化问题
哪些依赖没有持久化?
ruby 的 gems 没有持久化
archlinux 的 postgresql-libs 没有持久化如何解决
使用 mount 参数和 Dockerfile 的 RUN 指令来解决- 使用 mount 参数
.devcontainer/devcontainer.json
添加 “source=gems,target=/usr/local/rvm/gems,type=volume”,
注意句尾逗号也要写 - 使用 RUN 指令
.devcontainer/Dockerfile
文末添加 RUN yes | pacman -S postgresql-libs
- 使用 mount 参数
rebuild 后要重新设置国内镜像 bundle config mirror.https://rubygems.org https://gems.ruby-china.com
REST 风格是什么
看见路径就知道请求什么东西
items - 数据
tags - 标签
validation_codes - 验证码看见动词就知道是什么操作
get - 获取
post - 创建
patch - 更新
delete - 删除看见状态码就知道结果是什么
200 - 成功
201 - 创建成功
401 - 未登录
402 - 需付费
403 - 没有权限
404 - 未找到
412 - 不满足前提条件
422 - 无法处理,参数有问题
429 - 请求太频繁
400 - 其他所有错误,详细原因可以放在 body 里
API概要设计
见课件
路由与分页
生成路由
回顾一下,前面是手写创建路由,现在来使用 Rails 提供的路由功能,Rails 路由能识别 URL,将其分发给控制器的动作进行处理,还能生成路径和 URL,无需直接在视图中硬编码字符串。
# config/routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
# /api/v1/xxx
resources :validation_codes, only: [:create]
# only: [:create] 只生成 create 接口
resources :session, only: [:create, :destory]
# 啊啊啊做笔记才发现这里 destroy 拼写错了所以没生成 🤦🏻♀
resources :me, only: [:show]
resources :items
resources :tags
end
end
end
执行命令 bin/rails routes
会生成
POST /api/v1/validation_codes(.:format) api/v1/validation_codes#create
POST /api/v1/session(.:format) api/v1/session#create
GET /api/v1/me/:id(.:format) api/v1/me#show
GET /api/v1/items(.:format) api/v1/items#index
POST /api/v1/items(.:format) api/v1/items#create
GET /api/v1/items/:id(.:format) api/v1/items#show
PATCH /api/v1/items/:id(.:format) api/v1/items#update
PUT /api/v1/items/:id(.:format) api/v1/items#update
DELETE /api/v1/items/:id(.:format) api/v1/items#destroy
GET /api/v1/tags(.:format) api/v1/tags#index
POST /api/v1/tags(.:format) api/v1/tags#create
GET /api/v1/tags/:id(.:format) api/v1/tags#show
PATCH /api/v1/tags/:id(.:format) api/v1/tags#update
PUT /api/v1/tags/:id(.:format) api/v1/tags#update
DELETE /api/v1/tags/:id(.:format) api/v1/tags#destroy
建模
参照前面数据库建模
# 创建 ValidationCode 数据表
bin/rails g model ValidationCode email:string kind:string used_at:datetime
# 创建 item 数据表
bin/rails g model item iser_id:integer amount:integer notes:text tags_id:integer happen_at:datetime
同步到数据库 bin/rails db:migrate
创建 controller
参照前面创建 controller
bin/rails g controller Api::V1::Validation_codes create
bin/rails g controller Api::V1::Items
安装 kaminari
在 Gemfile 里面添加 gem 'kaminari'
终端执行 bundle
然后重启 bin/rails s
修改配置 config/initializers/kaminari_config.rb