浅谈RESTful

点击蓝色字关注我们!

一个努力中的公众号

长的好看的人都关注了

1b83566f46949fead4fdb2f129ed41b8.png

一.什么是RESTful 面向资源

简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。

(什么是表述性:就是指客户端请求一个资源,服务器拿到的这个资源,就是表述)

资源的地址 在web中就是URL (统一资源标识符)

资源是REST系统的核心概念。 所有的设计都是以资源为中心

结合项目怎么识别资源

1.商品加入购物车 购物车

2.提交订单 订单

3.创建用户 用户

围绕资源进行 添加,获取,修改,删除,以及对符合特定条件的资源进行列表操作 。针对资源设计接口

二.关于规范与约束有哪些?

RESTful 架构的核心规范与约束:统一接口

分为四个子约束:

1.每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源

2.消息的自描述性

3.资源的自描述性。

4.HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎)

即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息,如到底是向哪个URL发送请求等。也就是说,一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源,而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作

目的:实现客户端无需借助任何文档即能调用到所有的服务器资源

 643571d1a804bb9e07548cd3b07a547d.jpeg

三、资源的URL设计

1.通过URL来表示资源

资源分为主资源与子资源

因为主资源是一类独立的资源 所以主资源应直接放在相对路径下:例如

若要表示主资源的实例:如果实例的ID=1,则这样表示: /goods/1

子资源:

一个实例的子资源可能是一个集合也可能是一个单一的子资源

子资源为图片集合:/goods/1/pictures

子资源为商品折扣的单子子资源:/goods/1/discount

2.单数 vs. 复数

获取用户1的信息,哪种方式更符合RESTful?

/api/users/1

/api/user/1

3.相对路径 vs. 请求参数

极光的RESTful API:

获取用户信息 GET /v1/users/{username} 参数放在路径中

VS

获取用户信息 GET /v1/users?username=xxxxx 拼接的方式

获取应用管理员列表 GET /v1/admins?start={start}&count={count} ?后拼接参数的方式:这种方式一般作为过滤资源

4.使用合适的动词 get delete put post

选择请求接口的方式: get delete

PUT 在服务器更新资源(客户端提供改变后的完整资源)。

POST 在服务器新建一个资源

5.使用标准的状态码

GET

  • 安全且幂等

  • 获取表示

  • 变更时获取表示(缓存)

  • 200(OK) - 表示已在响应中发出

  • 204(无内容) - 资源有空表示

  • 301(Moved Permanently) - 资源的URI已被更新

  • 303(See Other) - 其他(如,负载均衡)

  • 304(not modified)- 资源未更改(缓存)

  • 400 (bad request)- 指代坏请求(如,参数错误)

  • 404 (not found)- 资源不存在

  • 406 (not acceptable)- 服务端不支持所需表示

  • 500 (internal server error)- 通用错误响应

  • 503 (Service Unavailable)- 服务端当前无法处理请求

  • POST

    PUT

    DELETE

    • 301 (Moved Permanently)- 资源的URI已更改

    • 303 (See Other)- 其他,如负载均衡

    • 400 (bad request)- 指代坏请求

    • 404 (not found)- 资源不存在

    • 409 (conflict)- 通用冲突

    • 500 (internal server error)- 通用错误响应

    • 503 (Service Unavailable)- 服务端当前无法处理请求

    • 200 (OK)- 资源已被删除

    • 不安全但幂等

    • 删除资源

    • 201 (created)- 如果新资源被创建

    • 301(Moved Permanently)- 资源的URI已更改

    • 303 (See Other)- 其他(如,负载均衡)

    • 400 (bad request)- 指代坏请求

    • 404 (not found)- 资源不存在

    • 406 (not acceptable)- 服务端不支持所需表示

    • 409 (conflict)- 通用冲突

    • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

    • 415 (unsupported media type)- 接受到的表示不受支持

    • 500 (internal server error)- 通用错误响应

    • 503 (Service Unavailable)- 服务当前无法处理请求

    • 200 (OK)- 如果已存在资源被更改

    • 不安全但幂等

    • 用客户端管理的实例号创建一个资源

    • 通过替换的方式更新资源

    • 如果未被修改,则更新资源(乐观锁)

    • 201(created)- 如果新资源被创建

    • 202(accepted)- 已接受处理请求但尚未完成(异步处理)

    • 301(Moved Permanently)- 资源的URI被更新

    • 303(See Other)- 其他(如,负载均衡)

    • 400(bad request)- 指代坏请求

    • 404 (not found)- 资源不存在

    • 406 (not acceptable)- 服务端不支持所需表示

    • 409 (conflict)- 通用冲突

    • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

    • 415 (unsupported media type)- 接受到的表示不受支持

    • 500 (internal server error)- 通用错误响应

    • 503 (Service Unavailable)- 服务当前无法处理请求

    • 200(OK)- 如果现有资源已被更改

    • 不安全且不幂等

    • 使用服务端管理的(自动产生)的实例号创建资源

    • 创建子资源

    • 部分更新资源

    • 如果没有被修改,则不过更新资源(乐观锁)

  • 6.选择适当的表示结构

    json   xml

    7. 版本控制

    例如:e79e08e30708bf4c0e8b73a5512251b9.png

添加小编微信,加入技术交流群or招聘交流群

QQ千人技术交流群: 710566091   一起学习一起成长

### 多场景下某平台反爬虫策略探讨 #### 场景一:电商平台的商品信息保护 为了防止竞争对手通过自动化工具大量获取商品的价格、库存等敏感商业信息,电商网站通常会采用多种反爬虫机制。例如,京东和淘宝可能会利用复杂的验证码验证用户身份,限制同一IP地址的请求频率,并监控异常行为模式[^3]。 对于此类情况下的反爬虫措施还包括但不限于: - **动态网页加载**:部分商品详情页的数据并非一次性全部返回给浏览器,而是分批次异步加载显示出来; - **加密参数传递**:URL中的查询字符串可能经过特殊编码处理,使得普通的HTTP GET请求难以直接获得所需资源; ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get('https://example.com/product', headers=headers) print(response.text) ``` 上述代码展示了如何设置自定义`User-Agent`头来模仿真实用户的浏览习惯,但这并不足以完全规避高级别的防护体系[^4]。 #### 场景二:社交网络的内容分享控制 社交媒体平台往往重视用户体验以及内容版权管理,所以也会部署相应的防御方案阻止未经授权的大规模数据采集活动。这方面的具体做法有: - **API接口权限校验**:只有注册过的应用才能调用官方提供的RESTful API读写特定范围内的资料; - **图形化界面交互逻辑判断**:当检测到连续快速点击按钮或滚动页面时触发警告提示框并记录日志; ```javascript // JavaScript模拟人类自然滑动屏幕事件 function simulateHumanScroll() { const scrollStep = Math.floor(Math.random() * 100); window.scrollBy(0, scrollStep); // 随机数值让动作更像真人所为 } setInterval(simulateHumanScroll, 2000 + Math.round(Math.random()*800)); ``` 此段JavaScript脚本尝试重现真实的用户操作方式以降低被识别的风险水平。 #### 场景三:金融类服务平台的安全保障 鉴于金融机构对安全性的极高要求,其在线门户往往会集成更为严格的身份认证过程和技术手段抵御潜在风险。典型特征如下所示: - **多因素鉴权机制**:除了传统的账号密码组合外还需提供额外的一次性口令(OTP)、生物特征样本等辅助证明材料; - **流量分析引擎**:基于机器学习算法构建实时监测系统评估每一次连接是否存在可疑之处; 综上所述,在不同应用场景里实施有针对性的设计思路能够有效提升系统的整体安全性,同时也提醒广大开发者应当遵循道德准则合法合规地开展工作[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值