不写代码开启Restful服务

这篇具有很好参考价值的文章主要介绍了不写代码开启Restful服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前言

很久没有写文章了,不管什么原因,总觉得心里还是觉得有点焦虑,不看看书写点东西就有莫名的焦虑,仿佛只有忙起来才能忘记焦虑。虽然我也知道更重要的是思考方向,但是就像走路,不出发随着时间的流逝,总觉得有种焦虑感,总觉得一直走在路上,才有踏实的充实感,不知道你们是不是这种感觉,还是只是我的个人感觉。

2 不用写代码的服务器

这篇文章不是什么高深的底层知识,只是介绍个工具。原因我在写后端代码的时候,代码内部需要调用个Restful服务,而这个服务是其他同事开发的,没有开发好。所以我想找个模拟器,类似mock,模拟服务器端进行调试。

很久前有见过一款同事开发的那种模拟tcp的服务器,挺好用的界面版本,可以配置对接收到不同的消息,返回不同的结果,挺好的,找不到了。自己也懒得去写了就在github上找了下,发现一款好用的模拟Restful服务器,尝试下,非常好用,还支持定制。

3 Json-Server

json-server 是用js开发的,作为后端开发者可能对js开发的应用有点排斥,不过尝试了就知道,其实也挺好用,现在我甚至觉得用nodejs开发,其实是件很爽的事情,代码写的像python,简单库还挺丰富的。

3.1 原理

json-server的原理比较简单,后端提供个json文件,然后利用lowdb(一个将json文件当数据库的开源库,参考:https://github.com/typicode/lowdb)作为后端的数据存储服务器做的服务。 举个lowdb的例子:

// Edit db.json content using plain JavaScript
db.data.posts.push({ id: 1, title: 'lowdb is awesome' })

// Save to file
db.write()

// db.json
{
  "posts": [
    { "id": 1, "title""lowdb is awesome" }
  ]
}

在github上有19.8k个star,确实是思路清奇的作品啊。 json-server就是利用lowdb作为后端数据存储服务,然后处理下Restful数据,用图表示如下: 不写代码开启Restful服务,后端 图中的Httpie是python写的类似于curl的工具,可以发起http的请求。

3.2 安装和配置

安装方法比较简单,需要通过npm安装(作为java开发人员可以理解为类似maven工具,管理js的包,且可以下载安装依赖包),npm安装的地址为:https://nodejs.org/en

安装好npm就可以安装json-server了,如下命令:

npm install -g json-server
# verify the installation was successful
json-server -v

配置json-server其实比较简单,就是新建个配置文件,上面说了json-server利用lowdb作为后端存储,和我们平时开发利用mysql存储数据没有多少的区别。 所谓的配置就是新建个配置文件,用网上的例子如下:

{
  "wines": [
    { "id": 1, "product""SOMMELIER SELECT",
      "desc""Old vine Cabernet Sauvignon""price": 159.99 },
    { "id": 2, "product""MASTER VINTNER",
      "desc""Pinot Noir captures luscious aromas""price": 89.99 },
    { "id": 3, "product""WINEMAKER'S RESERVE",
      "desc""Merlot featuring complex flavors of cherry""price": 84.99 },
    { "id": 4, "product""ITALIAN SANGIOVESE",
      "desc""Sangiovese grape is famous for its dry, bright cherry character""price": 147.99 }
  ],
  "comments": [
    { "id": 1, "body""like the added grape skins""wineId": 1 },
    { "id": 1, "body""the directions need to be clearer""wineId": 2 },
    { "id": 3, "body""I received 3 different packages of wood chips""wineId": 1 }
  ],
  "profile": { "name""vintnor" }
}

文件命名为db.json,然后我们就可以启动服务了。 简单的启动命令:

F:\jscode\json-server>json-server -w db.json

  \{^_^}/ hi!

  Loading db.json
  Done

  Resources
  http://localhost:3000/posts
  http://localhost:3000/comments
  http://localhost:3000/profile

  Home
  http://localhost:3000

  Type s + enter at any time to create a snapshot of the database
  Watching...

我们可以指定定制的端口,-w 后面带着json文件即是lowdb的存储文件,可以通过-h命令查看json-server支持的参数。

F:\jscode\json-server>json-server -h
bin.js [options] <source>

Options:
  -c, --config                   Path to config file
                                                   [default: "json-server.json"]
  -p, --port                     Set port                        [default: 3000]
  -H, --host                     Set host                 [default: "localhost"]
  -w, --watch                    Watch file(s)                         [boolean]
  -r, --routes                   Path to routes file
  -m, --middlewares              Paths to middleware files               [array]
  -s, --static                   Set static files directory
      --read-only, --ro          Allow only GET requests               [boolean]
      --no-cors, --nc            Disable Cross-Origin Resource Sharing [boolean]
      --no-gzip, --ng            Disable GZIP Content-Encoding         [boolean]
  -S, --snapshots                Set snapshots directory          [default: "."]
  -d, --delay                    Add delay to responses (ms)
  -i, --id                       Set database id property (e.g. _id)
                                                                 [default: "id"]
      --foreignKeySuffix, --fks  Set foreign key suffix (e.g. _id as in post_id)
                                                                 [default: "Id"]
  -q, --quiet                    Suppress log messages from output     [boolean]
  -h, --help                     Show help                             [boolean]
  -v, --version                  Show version number                   [boolean]

Examples:
  bin.js db.json
  bin.js file.js
  bin.js http://example.com/db.json

https://github.com/typicode/json-server

3.3 利用HTTPie来测试服务器

3.3.1 GET请求

HTTPie也是个好玩的python工具,类似于curl,我们这次用它来测试: 不写代码开启Restful服务,后端

在另外终端输入:

http get http://localhost:3000/wines

显示如下: 不写代码开启Restful服务,后端

可以支持更复杂的查询语法和我们平时写的springboot服务很像: 不写代码开启Restful服务,后端

还支持正则表达式查询:

C:\Users\Think>http get http://localhost:3000/wines?product_like=TWO
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 154
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jul 2023 07:31:02 GMT
ETag: W/"9a-LGllsaww9QbJMJRaD+BGgkdFcJc"
Expires: -1
Keep-Alive: timeout=5
Pragma: no-cache
Vary: Origin, Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: Express

[
    {
        "desc""Squeezed rapidly from a delicate, yet pretentious grape",
        "id""5",
        "price""2.99",
        "product""TWO-ISH BUCK CHUCK"
    }
]

查询语法是在字段后面加上_like即可。 不敢相信,还支持全文检索,如下语法:

C:\Users\Think>http get http://localhost:3000/wines?q=yet
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 154
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jul 2023 07:32:52 GMT
ETag: W/"9a-LGllsaww9QbJMJRaD+BGgkdFcJc"
Expires: -1
Keep-Alive: timeout=5
Pragma: no-cache
Vary: Origin, Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: Express

[
    {
        "desc""Squeezed rapidly from a delicate, yet pretentious grape",
        "id""5",
        "price""2.99",
        "product""TWO-ISH BUCK CHUCK"
    }
]
3.3.2 POST请求添加数据
不写代码开启Restful服务,后端
image.png

我们可以利用POST方法添加一条数据:

http POST localhost:3000/wines id=5 product="TWO BUCK CHUCK" price=2.99 desc="Squeezed rapidly from a delicate, yet unpretentious grape"

增加后通过id查询:

http get http://localhost:3000/wines/5
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 136
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jul 2023 07:24:09 GMT
ETag: W/"88-BPC094++pBcIJDHh/bbFUYN5tzY"
Expires: -1
Keep-Alive: timeout=5
Pragma: no-cache
Vary: Origin, Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: Express

{
    "desc""Squeezed rapidly from a delicate, yet unpretentious grape",
    "id""5",
    "price""2.99",
    "product""TWO BUCK CHUCK"
}
不写代码开启Restful服务,后端
POST请求
3.3.3 PUT请求修改数据
不写代码开启Restful服务,后端
image.png

PUT请求修改数据命令如下:

http PUT localhost:3000/wines/5 product="TWO-ISH BUCK CHUCK" price=2.99 desc="Squeezed rapidly from a delicate, yet pretentious grape"
不写代码开启Restful服务,后端
PUT请求
3.3.4 删除数据
不写代码开启Restful服务,后端
删除数据
http DELETE localhost:3000/wines/5
不写代码开启Restful服务,后端
删除服务

4 简单的定制

如果我们需要授权访问,或需要很多定制数据,而且数据要是自己可以定制的,这时候就只能通过编码完成了,比如生成一千条数据

// index.js
module.exports = () => {
  const data = { users: [] }
  // Create 1000 users
  for (let i = 0; i < 1000; i++) {
    data.users.push({ id: i, name: `user${i}` })
  }
  return data
}

运行:

$ json-server index.js

测试:

C:\Users\Think>http get localhost:3000/users/1
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 32
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jul 2023 07:52:06 GMT
ETag: W/"20-UdPmwiEpoycb9u2K15k2zz81mIU"
Expires: -1
Keep-Alive: timeout=5
Pragma: no-cache
Vary: Origin, Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: Express

{
    "id": 1,
    "name""user1"
}

对于我来说关键是定制请求和服务,可以通过下面的代码来实现:

const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()
const { v4: uuidv4 } = require('uuid');

// Set default middlewares (logger, static, cors and no-cache)
server.use(middlewares)

const probeId = uuidv4();
console.log(probeId)


const registerResponse = {
    "resultMessage":"注册成功",
    "resultCode": 0,
    "time": Date.now()/1000,
    "data" : {
        "id""3KhOenUhjFI7Eg2A0Ovvr396SX2WIO8kgGvxMPvd8EHsu8Y2/mp3DMHy1DPoX0pX"
    }
}

const heartbeatResponse = {
    "resultMessage":"操作成功",
    "resultCode": 0,
    "time": Date.now()/1000
}


// Add custom routes before JSON Server router
server.get('/echo', (req, res) => {
  res.jsonp(req.query)
})

server.post('/manage/register', (req, res) => { 
  res.jsonp(registerResponse)
})

server.post('/manage/heartbeat',(req,res) => {
  res.jsonp(heartbeatResponse)
})



// To handle POST, PUT and PATCH you need to use a body-parser
// You can use the one used by JSON Server
server.use(jsonServer.bodyParser)
server.use((req, res, next) => {
  if (req.method === 'POST') {
    req.body.createdAt = Date.now()
  }
  // Continue to JSON Server router
  next()
})

// Use default router
server.use(router)
server.listen(3000, () => {
  console.log('JSON Server is running')
})

虽然代码比较长,但是大部分都是官方的例子的,定制的消息地方是:

// Add custom routes before JSON Server router
server.get('/echo', (req, res) => {
  res.jsonp(req.query)
})

server.post('/manage/register', (req, res) => { 
  res.jsonp(registerResponse)
})

server.post('/manage/heartbeat',(req,res) => {
  res.jsonp(heartbeatResponse)
})

不得不说nodejs对json的处理实在是太方便了,代码要正常运行还需要安装开发包:

$ npm install json-server --save-dev

运行定制服务:

F:\jscode\json-server\json>node server.js
JSON Server is running

测试,将请求的json放入文件hearbeat.json中,内容如下:

{"id":"3KhOenUhjFI7Eg2A0Ovvr396SX2WIO8kgGvxMPvd8EHsu8Y2/mp3DMHy1DPoX0pX","encryptTime":"ksySo5ll7c5kg0DGr9FF4Q==","time":"1690013067"

请求命令如下:

F:\jscode\json-server\json>http -x post 127.0.0.1:3000/manage/heartbeat  =@heartbeat.json
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 82
Content-Type: application/json; charset=utf-8
Date: Sat, 22 Jul 2023 08:19:09 GMT
ETag: W/"52-BOhF+g6Q+Rj2eKLuULBssIjnupA"
Expires: -1
Keep-Alive: timeout=5
Pragma: no-cache
Vary: Origin, Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: Express

{
    "resultCode": 0,
    "resultMessage""操作成功",
    "time": 1690012803.145
}

可以看到,我们完成了消息定制的功能。

好,打完手工。

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-602150.html

到了这里,关于不写代码开启Restful服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件工程师,要么不写代码,要么就写优雅的代码

    何为优雅的代码         优雅的代码,至少需要遵循以下几个原则:          遵守规范         优雅的代码,首先让人看起来就是很整洁的。而这种整洁,则来源于代码规范。严格地遵守代码规范,是提高且保证代码质量的最有效方法。从个人开发的角度来看,一

    2024年02月06日
    浏览(55)
  • 关于程序员不写代码注释这一件事

    博主个人写代码是肯定会写注释的,哪怕是简单的功能,文档注释、多行注释、单行注释怎么顺手怎么用,让一个小白也能看懂自己的代码。 博主认为程序员不写注释的原因无外乎以下几点: 1、太懒了,就是单纯不想写 2、平时没有养成写代码注释的习惯 3、作为一个程序员

    2024年02月07日
    浏览(40)
  • 不写一行代码(一):实现安卓基于GPIO的LED设备驱动

    第1篇 :不写一行代码(一):实现安卓基于GPIO的LED设备驱动 第2篇 :不写一行代码(二):实现安卓基于PWM的LED设备驱动 第3篇:不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动 安卓设备驱动,本质上依旧还是Linux架构的驱动程序,基于Linux Kernel。在做安卓ROM开发的过程中

    2024年02月05日
    浏览(43)
  • 使用ChatGPT完成程序开发——目标:不写一行代码完成图像识别并点击

            本文作为一个使用AI开发的思路,让更多的人可以利用AI完成一些简单的程序,文中使用的是国内镜像GTP3.5 源码: GitHub - kasimshi/testCV: AI编写的OpenCV图像识别例子 GTP镜像:     对AI描述我们要做的功能,让它给给初步的思路和方向 作为新手,让AI推荐容易使用的相关

    2023年04月25日
    浏览(41)
  • 不写一行代码,智汀帮你轻松将米家智能家居接入HomeKit

    小编曾写过不少关于通过智汀将米家接入HomeKit的教程,尽管步骤和方法相对来说都挺简单的,但很多都需要代码来进行操作。这对于有编程基础的朋友来说不难,但对普通人来说,特别是不懂代码的,有一定程度上的难度。比如我之前发完教程后,有不少朋友私信求助,他们

    2024年02月16日
    浏览(57)
  • 一行代码也不写,拿Github Copliot + DallE3做一个小游戏是什么体验?

    我全程没写一句代码...       乡村爱情15看完了,晚上也没什么事,就寻思折腾点事做,儿子问我小时候最爱玩什么游戏,我毫不犹豫的说1945,正好这个事情给了我一个brain storming,那我自己写一个简单的1945可不可以?       说干就干,但是我也没写过游戏,于是我开启了

    2024年02月03日
    浏览(44)
  • 从零实现一套低代码(保姆级教程)【后端服务】 --- 【16】初始化后端项目

    在前面的实现过程中,我们的低代码平台,在前端已经有一定的构建页面的能力了。 但是对于我们实现一个平台,肯定要支持用户对页面进行保存等功能,包括后面我们运行时的设计,都要依赖于后端的能力 所以,现在我们需要考虑开始使用数据存储了。那因为博主平时的

    2024年01月24日
    浏览(52)
  • 阿里云短信服务详细说明与实战开发后端代码

    目前在很多项目中都出现使用短信验证码来实现注册、登录、购买、支付、转账等功能,发短信功能几乎已经成为项目中不可或缺的技术之一。 短信平台与运营商之间协同合作,利益分成。 短信发送流程通常涉及以下步骤: Java程序调用短信平台提供的API接口,将短信内容、

    2023年04月18日
    浏览(36)
  • 从零实现一套低代码(保姆级教程)【后端服务】 --- 【18】实现页面接口对应的前端

    在上一篇中,我们已经把和页面相关的接口完成的差不多了。从创建页面,更新页面等等: 有了接口之后,我们就可以构建前端页面了。那这部分前端内容我们应该写在哪里呢? 有两种方式: 直接写在我们的XinBuilder项目里面,然后通过前端路由拆分成两个路由 在创建一个

    2024年01月22日
    浏览(53)
  • 【常用bsub指令介绍】使用bsub命令提交作业、开启交互式窗口,在集群服务器上用pdb进行代码调试

    在一个服务器集群中,有很多的人要使用,却只有很少的GPU。LSF作业调度系统则是对每个用户提交的作业和需要使用的GPU进行调度。一般使用bsub命令来将待运行的作业提交到集群上。 用bsub run.sh提交了作业,一般是作业已经可以成功跑起来,提交了作业后直接等作业运行结束

    2024年01月22日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包