RESTful API 快速实践

简介

REST(Representational State Transfer):表现层状态转移,一种软件架构风格。什么是表现层状态转移?即通过URL地址拼接上HTTP的动词(GET,POST,PUT,DELETE)来操作资源,进行增删改查。基于REST构建的API就是RESTful API。RESTful API它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

了解 RESTful API

RESTful架构

RESTful就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。要理解RESTful架构,首先就是理解Representational State Transfer(表现层状态转移)的含义。

表现层

表现层比较抽象,我们可以简单将理解为网络资源的表现形式,资源是我们何以从网络上获取的具体信息,比如图片,文本,数据等信息。变现层就是将我们的资源实体以特定的方式表示出来,比我我们使用JSON表示数据信息。

状态转移

当我们访问一个网站,表示了客户端和服务器的一个互动过程。在这个过程中,就涉及到数据和状态的变化。我们从服务器获取,修改数据都是状态的变化。客户端与服务器通过HTTP协议进行通信具体通过使用常见的四个HTTP动词来实现。


GET用来获取资源,
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源。

我们对服务器进行访问,服务器会向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

URL统一资源定位符

在www上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是www的统一资源定位标志,就是指网络地址。RESTfulAPI 常使用URL指定我们访问的资源。

RESTful API 实践

服务程序

要学习使用RESTful API我们首先需要一台服务器运行提供 RESTful API的服务器程序,这里我们在本地服务器上运行ntopng(一个网络流量监控分析工具),ntopng提供了丰富的RESTful API供用户使用。

编程环境

目前,许多编程语言都可以使用RESTful API,比如JS,java,python语言风格便于理解和编写,并且有十分丰富的库可以使用,这里我们以python为例,首先我们需要在python环境安装requests模块。

pip install requests

API接口查询

在使用RESTful API之前我们首先要查询服务程序提供怎样的RESTful API,通过查询ntopng的是使用手册,我们可以看到提供了许多的API,这里我们以获取接口信息的API为例。这里可以看到可以使用GET方法查询接口信息,以及查询是需要的变量信息。
在这里插入图片描述
然后我们可以看到可以使用POST方法删除ntopng的某个具体的用户的API。
在这里插入图片描述

编程

首先使用GET的方法获取接口参数。

import requests, json   
github_url = 'http://192.168.0.117:3001/lua/rest/v1/get/interface/data.lua?ifid=2&host=192.168.0.117&verbose=true'
r = requests.get(github_url, auth=('admin', 'mp1234'))                               
print(r.json())

输出结果如下字典数据:
在这里插入图片描述
使用POST 可以对网络资源进行编辑和修改,现在我们根据API的描述使用POST的方法删除一个用户,打开ntopng我们可以看到,这个有一用户canda。
在这里插入图片描述
编写如下程序,利用RESTful API删除用户canda.

import requests, json
github_url='http://192.168.0.117:3001/lua/rest/v1/delete/ntopng/user.lua'
header=({'Content-Type':'application/json'})
data = json.dumps({"username":"canda"})
r = requests.post(url=github_url,headers=header,data=data,auth=('admin','mp1234'))                         #dir
print(r.json())

返回结果如下,用户已经成功被删除。
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值