博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ruby 构建API接口流程代码
阅读量:5031 次
发布时间:2019-06-12

本文共 3766 字,大约阅读时间需要 12 分钟。

来源:https://ruby-china.org/topics/25822

1、创建新项目

  rails new api_demo

2、生成控制器:

  # 我们不需要生成资源文件  $ bundle exe rails g controller api/v1/base --no-assets

  app/controllers/api/v1/base_controller.rb,

  class Api::V1::BaseController < ApplicationController    # disable the CSRF token    protect_from_forgery with: :null_session    # disable cookies (no set-cookies header in response)    before_action :destroy_session   # disable the CSRF token    skip_before_action :verify_authenticity_token       def destroy_session    request.session_options[:skip] = true   end   end 3、配置路由

  config/routes.rb,

  namespace :api do    namespace :v1 do    resources :users, only: [:index, :create, :show, :update, :destroy]    # 原文有 microposts, 我们现在把它注释掉    # resources :microposts, only: [:index, :create, :show, :update, :destroy]    end   end 4、生成控制器:
  # 我们不需要生成资源文件  $ bundle exe rails g controller api/v1/users --no-assets

  app/controllers/api/v1/users_controller.rb,

  class Api::V1::UsersController < Api::V1::BaseController    def show    @user = User.find(params[:id])    # 原文使用 Api::V1::UserSerializer    # 我们现在使用 app/views/api/v1/users/show.json.jbuilder    # render(json: Api::V1::UserSerializer.new(user).to_json)    end   end

  app/views/api/v1/users/show.json.jbuilder,

  json.user do    json.(@user, :id, :email, :name, :activated, :admin, :created_at, :updated_at)   end 5、User 模型和 users 表
  $ bundle exe rails g model User

  app/models/user.rb,

  class User < ActiveRecord::Base   end

  db/migrate/20150502072954_create_users.rb,

  class CreateUsers < ActiveRecord::Migration    def change    create_table :users do |t|    t.string :email    t.string :name    t.datetime :activated    t.boolean :admin, default: false    t.timestamps null: false    end   end   end 6、数据迁移:
  $ bundle exe rake db:migrate

  种子数据:

  db/seeds.rb,

  users = User.create([    {    email: 'test-user-00@mail.com',    name: 'test-user-00',    activated: DateTime.now,    admin: false    },    {    email: 'test-user-01@mail.com',    name: 'test-user-01',    activated: DateTime.now,    admin: false    }    ])

  创建种子数据:

  $ bundle exe rake db:seed 7、现在我们可以测试一下 api 是否正常工作, 我们可以先查看下相关 api 的路由,
$ bundle exe rake routes

输出:

Prefix Verb   URI Pattern Controller#Action api_v1_users GET /api/v1/users(.:format) api/v1/users#index POST /api/v1/users(.:format) api/v1/users#create api_v1_user GET /api/v1/users/:id(.:format) api/v1/users#show PATCH /api/v1/users/:id(.:format) api/v1/users#update PUT /api/v1/users/:id(.:format) api/v1/users#update DELETE /api/v1/users/:id(.:format) api/v1/users#destroy

启动 rails 服务,

$ bundle exe rails s

使用 curl 请求 api,

$ curl -i http://localhost:3000/api/v1/users/1.json
 
1、增加认证(Authentication)
 

  认证的过程是这样的: 用户把她的用户名和密码通过 HTTP POST 请求发送到我们的 API (在这里我们使用 sessions 端点来处理这个请求), 如果用户名和密码匹配,我们 会把 token 发送给用户。 这个 token 就是用来证明用户身份的凭证。然后在以后的每个请求中,我们都通过这个 token 来查找用户,如果没有找到用户则返回 401 错误。

2、给 User 模型增加 authentication_token 属性
 
  $ bundle exe rails g migration add_authentication_token_to_users
 

  db/migrate/20150502123451_add_authentication_token_to_users.rb

 
  class AddAuthenticationTokenToUsers < ActiveRecord::Migration    def change    add_column :users, :authentication_token, :string    end   end
 
  $ bundle exe rake db:migrate
3、生成 authentication_token
 

  app/models/user.rb,

 
  class User < ActiveRecord::Base    before_create :generate_authentication_token   def generate_authentication_token   loop do    self.authentication_token = SecureRandom.base64(64)     break if !User.find_by(authentication_token: authentication_token)    end   end   def reset_auth_token!    generate_authentication_token    save    end   end
最后注意的是:rails 5 中就可以弃用 gem 'jbuilder',这样就可以不必创建views文件,直接在apicontroller中直接render json数据流;

转载于:https://www.cnblogs.com/lv-books/p/6479158.html

你可能感兴趣的文章
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>
Oracle DBMS_SESSION
查看>>
sublime复制当前行到下一行
查看>>
WPF 3D变换应用
查看>>
luogu4012 深海机器人问题 网络流
查看>>
android 拍照上传照片
查看>>
ArchLinux安装开源VMware Tools
查看>>
系统用户分析模型
查看>>
DB2 锁升级示例1
查看>>
16.RDD实战
查看>>
MainFrame知识小结(20120210)—dfsort/syncsort中的数据类型
查看>>
jsp题库 (一)小测(25/21)
查看>>
D - Flip tile
查看>>
Java连接RabbitMQ之创建连接
查看>>
开户vim编程之--cscope支持
查看>>