[我所不知道的技术细节] 怎么在 Rails 开 Web API ? #前后端分离 #rubyonrails #weba

https://images.pexels.com/photos/3861943/pexels-photo-3861943.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260

摄影师:ThisIsEngineering,连结:Pexels

哈啰,我们又见面了,今天我们来看看:「使用 Ruby on Rails 框架时,怎么开出前后端分离的 Web API 给前端做串接呢?」,切ki奥~

1. Ruby on Rails 框架的架构

首先简单介绍一下 Ruby on Rails (简称 Rails) 的架构,Rails 是一个实践 MVC Pattern(Model-View-Controller Pattern) 的框架,对 MVC 不熟的捧油们可以参考 Model、View、Controller 三分天下 | 为你自己学 Ruby on Rails,也就是说 Model(资料格式)、View(显示资料)、Controller(资料逻辑) 在 Rails 中,是会被强制分开来执行的,好处是各自分工明确,对于熟悉 MVC 架构的人来说,开发上不易混淆;坏处是对于不熟悉 MVC 架构的人来说,一开始就面对超多的资料夹根本是天书,如果你还没看过 Rails 的新专案长怎样,现在就让你看看:

http://img2.58codes.com/2024/201245489XowYngj7U.png

只要一行指令,$ rails new {your-project-name}Rails 就会帮你把整个专案建好,就长上图的最左边这样,什么事都还没做,就已经一堆档案了,你如果没有先了解 MVC 是什么,看到这些档案一定相当傻眼。

我们把最常使用的资料夹拿出来看,就是 app/config/ 这两个资料夹,两个资料夹展开来,又是一堆档案,往 app/ 资料夹里面仔细一看,会看到熟悉的名字: modelsviewscontrollers,但我们今天只会用到 app/controllers/events_controller.rbconfig/routes.rb 这两个档案就够了。

2. 那什么是 Web API 呢?

讲到 Web API 就必须先讲到现代软体开发的趋势「前后端分离」,可以参考 [原来后端要知道] 什么是前后端分离? #前端后端是什么 #软体发展历程 #软体开发思维。

3. 所以该怎么在 RailsWeb API 呢?

对于笔者来说,认识一个新框架时,最重要的就是知道怎么利用框架来开 Web API,至少能开出 GETPOST 两种,还要能收 request body 带进来的资料。

阿对了,在开始写 Rails Web API 之前,你要先安装 Rails 和 建专案,可以参考 安装 Rails 开发环境 | Ruby on Rails 实战圣经 和 Rails 起步走 | Ruby on Rails 实战圣经。

3.1 在 config/routes.rb 新增两笔 routing 规则

Rails.application.routes.draw do# 开一个 GET /hello 的 API,并且对应到 EventController 的 index() methodget '/hello' => 'events#index'# 开一个 POST /hello 的 API,并且对应到 EventController 的 create() methodpost '/hello' => 'events#create'end

所以透过上面的设定,你就可以对 {your_host}/hello/ 丢 request 啰,但我们现在还没有写下收到 request 之后的动作:=> 'events#index' 这段程式,就是告诉 Rails 说:「只要是 /hello 的 request 都去 events_controller.rbindex() method 去找对应的动作」;同理,=> 'events#create' 这段就是要找 events_controller.rbcreate() method 啰,那么事不宜迟,我们马上来 events_controller.rb,写下我们想要这两个 requests 要做的事。

3.2 在 app/controllers/events_controller.rb 新增 EventController class 和 index()create() methods

贴心提醒,这个 events_controller.rb 预设是不会自动产生的哦,需要自己建立这个档案。

class EventsController < ApplicationController# 这个 index() method,就是 GET 127.0.0.1:3000/hello/ 所对应到的动作# 我们可以在这里,把资料库的资料捞出来,并 response 回给使用者# 但目前我们只简单回个字串,做个 Hello World 即可 ~def index# response with json formatrespond_to do |format|format.json { render :json => { :status => "OK" }, status => 200 }endend# 这个 create() method,就是 POST 127.0.0.1:3000/hello/ 所对应到的动作# 这边示範把 POST request 内的 body 所夹带的资料拿出来,并且再 response 回给使用者def create# parse POST request body@content = JSON.parse(request.raw_post)['data']# 我待会儿会在 Postman 夹带叫做 data 的测试字串# response with json formatrespond_to do |format|format.json { render :json => { :status => "OK", :content => @content }, status => 200 }endendend

3.3 Rails server 跑起来 !

在本地端做测试的话,可以直接执行下面这行

$ rails server

=> Booting Puma=> Rails 6.0.3.1 application starting in development => Run `rails server --help` for more startup optionsPuma starting in single mode...* Version 4.3.5 (ruby 2.6.3-p62), codename: Mysterious Traveller* Min threads: 5, max threads: 5* Environment: development* Listening on tcp://127.0.0.1:3000* Listening on tcp://[::1]:3000Use Ctrl-C to stop

Rails 中,预设是开 3000 ports,所以当你执行上面这行之后,就可以用浏览器到 127.0.0.1:3000/ 看到 Rails Hello World 的画面啰,但因为目前我们新增的是 Web API,无法用浏览器来测试,所以我们需要借用到 Postman 帮我们丢 request。

http://img2.58codes.com/2024/20124548yQq9DgJt5O.png

4. 测试 Web API 有没有开成功 !?

先来测测 GET 127.0.0.1:3000/hello/ 这支 API,如果你的 Rails Web API 有开成功,就会得到你刚刚在 events_controller.rbindex() method 的回应字串。

http://img2.58codes.com/2024/20124548J47oG4fASC.png

再来测测 POST 127.0.0.1:3000/hello/,记得你的 request body 放什么名字(我这边叫做 data),events_controller.rbcreate() method,就要跟着改(所以在 create()JSON.parse 就要解析 data)。

http://img2.58codes.com/2024/20124548V3KmBBiceu.png

总结

接触一个新框架后,先写一支传接资料的 Web API,已经变成笔者的习惯,就像是学新语言都要先印出 Hello World 一样,不写不能安心 XD。

笔者目前因为工作的关係,现在开始学习 Ruby on Rails,之后可以期待更多的 Rails 文章和后端文章啰 ~ (希望之后下班后还能有精神继续写作哈哈)

我是 RS,这是我的 不做怎么知道系列 文章,我们 下次见。


喜欢我的文章吗? 赶快来看看我都发了什么文章吧:我的文章目录欢迎阅读我的上一篇: [我所不知道的技术细节] 如何保障你辛苦写的程式码? #opensource #license #github欢迎阅读我的下一篇: 待续

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章