Ruby on Rails RESTful API 搭建指南:JWT & Swagger 集成
随着互联网的快速发展,RESTful API 已经成为构建现代应用程序的基石。在 Ruby 社区中,Rails 是最受欢迎的 Web 应用框架之一。本文将围绕 Ruby 语言,使用 Rails 框架,结合 JWT(JSON Web Tokens)和 Swagger,搭建一个安全的、可文档化的 RESTful API。
准备工作
在开始之前,请确保您已经安装了以下软件:
- Ruby
- Rails
- PostgreSQL 或其他数据库
- JWT 库(如 `jwt`)
- Swagger 库(如 `swagger-docs`)
创建 Rails 应用
创建一个新的 Rails 应用:
bash
rails new myapp --api
cd myapp
安装依赖
安装 JWT 和 Swagger 相关的 gem:
bash
bundle install
配置 JWT
在 `config/initializers/jwt.rb` 文件中配置 JWT:
ruby
Rails.application.config.middleware.use JWT::Middleware, secret: 'your_secret_key'
创建模型
创建一个简单的用户模型 `User`:
bash
rails generate model User name:string email:string password_digest:string
运行迁移:
bash
rails db:migrate
用户注册与登录
用户注册
创建一个 `UsersController`:
bash
rails generate controller Users
在 `app/controllers/users_controller.rb` 中添加注册逻辑:
ruby
class UsersController < ApplicationController
def create
user = User.new(user_params)
if user.save
render json: { message: 'User created successfully' }, status: :created
else
render json: { errors: user.errors.full_messages }, status: :unprocessable_entity
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password)
end
end
用户登录
在 `UsersController` 中添加登录逻辑:
ruby
class UsersController < ApplicationController
... (其他方法)
def login
user = User.find_by(email: params[:email])
if user && user.authenticate(params[:password])
token = JWT.encode({ id: user.id }, Rails.application.config.secret_key_base)
render json: { token: token }, status: :ok
else
render json: { error: 'Invalid credentials' }, status: :unauthorized
end
end
end
配置路由
在 `config/routes.rb` 文件中配置路由:
ruby
Rails.application.routes.draw do
resources :users, only: [:create, :login]
end
保护路由
创建一个 `AuthenticatedController`:
bash
rails generate controller Authenticated
在 `app/controllers/authenticated_controller.rb` 中添加一个方法来验证 JWT:
ruby
class AuthenticatedController < ApplicationController
before_action :authenticate_request
private
def authenticate_request
header = request.headers['Authorization']
header = header.split(' ').last if header
begin
@decoded = JWT.decode(header, Rails.application.config.secret_key_base, true, { algorithm: 'HS256' })
@current_user = User.find(@decoded[0])
rescue JWT::DecodeError
render json: { errors: 'Invalid token' }, status: :unauthorized
end
end
end
在 `app/controllers/users_controller.rb` 中添加一个受保护的方法:
ruby
class UsersController < ApplicationController
... (其他方法)
def show
render json: @current_user
end
end
在 `config/routes.rb` 中添加受保护的路由:
ruby
Rails.application.routes.draw do
... (其他路由)
post '/users/me', to: 'usersshow', as: 'me'
end
配置 Swagger
安装 Swagger 相关的 gem:
bash
gem install swagger-docs
在 `config/initializers/swagger-docs.rb` 文件中配置 Swagger:
ruby
Swagger::Docs::Config.register_swagger_document do
s.title = 'MyApp API'
s.description = 'A sample API using JWT and Swagger'
s.version = '1.0.0'
s.host = 'localhost:3000'
s.base_path = '/api'
s schemes = ['http', 'https']
s.security = [{ JWT: [] }]
include_paths = ['app/controllers']
s.api_version = '1.0.0'
s.host = 'localhost'
s schemes = ['http', 'https']
s.security = [{ JWT: [] }]
s.include_paths = include_paths
end
现在,您可以通过访问 `http://localhost:3000/api/swagger` 来查看 Swagger 文档。
总结
本文介绍了如何使用 Ruby on Rails 框架,结合 JWT 和 Swagger,搭建一个安全的、可文档化的 RESTful API。通过以上步骤,您应该已经成功创建了一个基本的 API 应用,并能够通过 Swagger 文档进行交互。
请注意,这只是一个简单的示例,实际应用中可能需要更多的安全性和功能。希望这篇文章能帮助您入门 Ruby on Rails RESTful API 开发。
Comments NOTHING