百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Koa入门(一)介绍(koa使用)

ccwgpt 2024-09-21 13:36 34 浏览 0 评论

1. Koa 简介

koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手

1.1 更小

koa 体积更小(500多行)、轻量。需要单独下载中间件配合开发。express 内置了很多中间件,集成度高。

1.2 富有表现力

需要编写的代码越少,程序就容易维护和调试。可读性高,编译器和人理解更简单。

1.3 更健壮

容错能力强,异常处理方便,程序不会挂掉,很好地抛异常。

2. 中间件机制

学习 Koa 重点在于理解中间件实现原理,对后续引用第三方库中间件时候有更好了解。

Koa 的应用程序其实就是一个包含一组中间件函数的对象,通过 app.use函数来加载中间件(也有引入顺序要求),这个函数有两个参数,context 指的是上下文环境对象,封装了一些属性;next 用于把中间件的执行权交给下游的中间件,在当前中间件中位于 next() 之后的代码会暂停执行,直到最后一个中间件执行完毕,再自下而上依次执行每个中间件中 next 值周的代码,类似于栈的先进后出。这种模型被称作“洋葱圈模型”。

简单的理解中间件呢,我觉得就是两边对称,举个例子:有个数组,奇数个也好,偶数个也罢。

const arr = [1, 2, 3, 2, 1]

程序从走向右执行,1 是一个中间件中的代码,同理 2 3。只是在两个 1 中间有个 next() 指向 22 中有个 next() 指向 3。但是 next() 执行完后还会回到当前的中间件(不知道是否解释清了,还是更乱了) 代码实现如下:

后面会详细介绍,大家先了解
// #1
app.use(async (ctx, next)=>{
    console.log(1)
    await next();
    console.log(1)
});
// #2
app.use(async (ctx, next) => {
    console.log(2)
    await next();
    console.log(2)
})

app.use(async (ctx, next) => {
    console.log(3)
})

3. REST

3.1 介绍

REST 是一种风格,是个万维网软件架构的风格,用于创建网络服务。REST 不是指休息的意思,而是 Representational State Transfer 的缩写,即 —— 表现层状态转化。

  • 表现层 把资源具体呈现出来的形式,比如文本可以用txt格式表现,也可以使用JSON格式、二进制格式表现。
  • 状态 指的当前状态,状态可以改变,使用 put 修改,使用 delete 删除等。
  • 转化 通过 http 协议,在客户端和服务端进行数据传输。

3.2 REST的6个限制

  • 客户-服务器(Client-Server)(CS架构) 关注点分离:服务端专注于数据处理,增删改查;客户端专注页面的交互和用户体验。简单性: 原来的服务端还需要渲染页面,MVC 模式,现在只需要关注数据,减少代码量可移植性:页面可以方便地移到其他平台,一套代码,接口不变就没问题。
  • 无状态(Stateless) 简单性:所有用户会话信息(用户信息)都保存在客户端,存在本地缓存。不需要由服务端存储记录可见性:客户端每次请求必须包括所有信息,不能依赖上下文信息可靠性:前后端完全依靠接口,比较独立,系统稳定
  • 缓存(Cache) 所有服务端响应都要被标为可缓存或不可缓存(cache-control)减少前后端交互,提升了性能(js 文件,css 文件都可以本地缓存)
  • 统一接口(Uniform Interface) 接口设计尽可能统一通用,提升了简单性、可见性(简单、易学、易维护)接口与实现解耦,使前后端可以独立开发迭代(开发人员不用在一块,有电脑依靠文档就可以实现快速开发)
  • 分层系统(Layered System) 每层只知道相邻的一层,后面隐藏的就不知道了(前端只知道接口,不了解后面可能存在的代理服务器)其它层:安全性、负载均衡(流量分发)、缓存层等
  • 按需代码(Code - On - Demand 可选) 客户端可以下载运行服务器传来的代码(比如 js,使用 eval 执行)常用的不会变的代码放在服务器,减少一些功能,简化了客户端

3.3 统一接口限制

  1. 资源的标识
  • 资源是任何可以命名的事物,如用户,评论
  • 每个资源可以通过URI唯一标识 https://api/github.com/users https://api/github.com/users/day
  1. 表述操作资源
  • 客户端不能直接操作服务端资源,通过传 json 操作
  1. 自描述信息
  • 每个消息(请求或相应)必须提供足够的信息让接受者理解
  • 媒体类型(application/json)
  • 合理使用 http 方法,get(查), post(增),delete(删)等
  • 是否缓存: cache-control
  • 文字链接用于网页跳转

3.4 REST 设计规范

  1. 具体什么样子
  • 基本的 URI 格式,如 https://api.github.com/users
  • 标准 http 方法,如 get, post, put, patch, delete
  • 传输的数据媒体类型,如 JSON
  1. 符合 REST 架构风格的 api
  • get /users: 获取用户列表
  • get /users/day 获取用户详情
  • delete users/1 删除 id1 的用户
  • put/patch users/1 更新 id1 的用户的信息

putpatch 的区别:patch 部分更新,put 整体替换

  1. 响应设计规范
  • 查询(后台负责接收参数返回数据)
  • 分页(查询的一种),长列表时,优化页面显示,分页返回
  • 字段过滤(查询的一种),如果前端不需要的数据可以不用返回,返回指定的字段,减少数据量
  • 状态码 200 - 请求成功301 - 资源(网页等)被永久转移到其它URL.404 - 请求的资源(网页等)不存在500 - 内部服务器错误
  • 错误处理 输出 JSON 格式错误信息。如果状态码是4xx或者5xx,就应该向用户返回错误信息。一般来说,返回的信息中将 error 作为键名,出错信息作为键值即可
  • 安全 https鉴权,有些页面需要先登录才能查看限流,防刷(做个中间层)http 头部加了 limit 字段,记录请求次数,如果超过,报错。也可以提示登录后获得更多的限流值
  • 开发者友好 - 提供接口文档

4. 参考资料

  • 理解RESTful架构
  • Node.js开发仿知乎服务端 深入理解RESTful API

相关推荐

土豪农村建个别墅不新鲜 建个车库都用框架结构?

农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...

自建框架结构出现裂缝怎么回事?

三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...

钢结构三维图集-框架结构(钢柱对接)

1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...

三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!

绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...

Casemaker机箱框架结构3D图纸 STEP格式

农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相

回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...

砖混结构与框架结构!究竟有何区别?千万别被坑!

农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...

砖混结构与框架结构,究竟有何区别?千万别被坑!

农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...

6个小众却逆天的App神器,个个都是黑科技的代表

你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...

合肥App开发做一个app需要多少钱?制作周期有多久?

在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...

详解应对App臃肿化的五大法则

编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...

8种移动APP导航设计模式大对比

当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...

数字资产支付 App 的技术框架

开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...

从MyBatis到App架构:设计模式全景应用指南

从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...

取消回复欢迎 发表评论: