想了很久,闲来无事,今天想了下还是总结了下写下来,部分参考官方源码理解,还有就是这么久的理解,

如果觉得有帮助请记得点赞

先讲下接口url组成拿后台服务为例 通常一个后台请求url格式:

http://www.gamma.tools.hw.com/PipelineSvr/v1/exeplan?plan=plan_002&scheme=scheme_001

当然你也可以直接nslookup www.gamma.tools.hw.com 解析域名加上端口,直接去请求后台像这样,前提你知道环境部署在哪台linux服务器的tomcat 上;

http:10.22.22.34:8039/PipelineSvr/v1/exeplan?plan=plan_002&scheme=scheme_001

这个组成格式为:域名(ip:port)/服务名称/子服务层/子服务下面哪个功能接口,这里是后台pipelineSvr的v1服务的计划方案接口

1.首先介绍接口常用四大类型get,post,delete,put这些method 你可能会想为什么会被定义出来这么多种呢,当然为了规范开发接口统一认识,假如现在我们一个团队get现在大家都公认为查询接口,post为新建接口,从无到有,delete删除服务数据接口,put为修改参数接口,比如更改下某个参数值有了这些规范开发看到方法就知道你想执行什么操作了,即使我对你的服务不熟悉我也可以判断大概这个借口属于那个操作类型;其次不同服务之间对接的数据获取很多都是走接口的,这是就意味着接口数据格式要统一,一般默认响应为json,如果你来个raw,我来个text,数据拿过来不能直接用,还要处理转换那就坑大了;

2.有了规范我们需要进一步,对服务资源进行管理标识,划分服务以及服务业务层,和定义各个服务的编号,每个服务各自状态码类型错误的含义指的是什么比如pipelineSvr现在接口请求响应了一个错误的状态码"DEV-PipelineSeverPlatform-Service-500"表示DEV表示是开发环境下,PipelineSeverPlatform-Service表示pipelineSvr的平台服务,500表示内部响应错误,直接不去找说明就知道什么原因,开发的效率有效提升问题定位迅速;

3.接下来我们深入认识每个类型接口区分特点:

GET :一般典型格式为http://www.gamma.tools.hw.com/PipelineSvr/v1/exeplan?plan=plan_002&scheme=scheme_001

用?隔开参数param,每个请求键值对用&符号隔开,直接地址栏可以看见参数也就意味着参数安全性低

还有一种写法是http://www.gamma.tools.hw.com/PipelineSvr/v1/exeplan?

在param里面以键值对形式存放在表单里面提交

key  xxx    value xxx

key2 xx value2 xxx

以表单formdata形式提交,postman用过的就不多说了

POST:

典型格式:http:///www.gamma.tools.hw.com/PipelineSvr/DetailPipeline

有请求头header的要带请求header,请求不需要的不带,参数存放于body中,get是存放param里面的这点注意区分,还有一个就是参数类型到底是表单格式还是json要注意开发接口规范怎么要求的,要application/x-www-form-urlencoded给x-www-form-urlencoded,要json给json

不然接口数据获取异常

body格式也是键值对:

key  xxx    value xxx

key2 xx value2 xxx

PUT请求同post

Delete:

典型也是类似get请求:

http://www.gamma.tools.hw.com/PipelineSvr/listjobid?jobid=xx&pipelineid=xxx

还有一种是直接走body传参数的格式,如body为json类型参数的

http://www.gamma.tools.hw.com/PipelineSvr/listjobidkey

body里面如下

{“jobId”: "xxx",

"pipelineId": "xxx"

}

谈到接口还会遇到文件上传,鉴权(基本,摘要),代理设置,请求超时,响应时间获取等等

下面进入逐个样例介绍

get post 例:

import requests

headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, compress',

'Accept-Language': 'en-us;q=0.5,en;q=0.3',

'Cache-Control': 'max-age=0',

'Connection': 'keep-alive',

'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}

s = requests.Session()

s.headers.update(headers)

# s.auth = ('superuser', '123')

s.get('https://www.kuaipan.cn/account_login.htm')

_URL = 'http://www.kuaipan.cn/index.php'

s.post(_URL, params={'ac':'account', 'op':'login'},

data={'username':'****@foxmail.com', 'userpwd':'********', 'isajax':'yes'})

r = s.get(_URL, params={'ac':'zone', 'op':'taskdetail'})

print(r.json()

超时与异常

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

cookie与会话session

import requests

url = 'http://httpbin.org/cookies'

cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}

# 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。

r = requests.get(url, cookies=cookies)

session

import requests

import json

session=requests.Session()

#发送json类型数据用户json序列化data

res=session.request("post",url=xx,data=json.dumps({'some': 'data'}),header={'Accept': 'text/html,application/xhtml+xml,application/xml})

pythondict=res.json()

鉴权身份认证一般无权限401

1.基本身份认证(HTTP Basic Auth):

import requests
from requests.auth import HTTPBasicAuth
 
r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd'))    # 简写
print(r.json())
2.另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:

requests.get(URL, auth=HTTPDigestAuth('user', 'pass'))

代理设置:

import requests
 
proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
 
requests.get("http://www.zhidaow.com", proxies=proxies)

.

文件上传

import requests
 
url = 'http://127.0.0.1:5000/upload'
files = {'file': open('/home/lyb/sjzl.mpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))}     #显式的设置文件名
 
r = requests.post(url, files=files)
print(r.text)
更加方便的是,你可以把字符串当着文件进行上传:

import requests
 
url = 'http://127.0.0.1:5000/upload'
files = {'file': ('test.txt', b'Hello Requests.')}     #必需显式的设置文件名
 
r = requests.post(url, files=files)
print(r.text)

响应时间以及其他参数获取:

r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd')

r.elapsed.total_seconds() # 获取接口响应开始请求到完成需要的时间

r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常

关于python接口基础到进阶随笔的更多相关文章

  1. python语法基础-函数-进阶-长期维护

    ###############    函数的命名空间和作用域    ############## """ # 函数进阶 命名空间和作用域 命名空间 全局命名空间——我们自 ...

  2. python语法基础-面向对象-进阶-长期维护

    ###############    @property定义属性    ############## # 所以对于定义属性你有好几种方式了和种类了,# 静态属性,动态属性, # property # ...

  3. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

  4. 第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器

    第四章 基础知识进阶第十七节 迭代.可迭代对象.迭代器 一.    引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节 ...

  5. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  6. Python基础与进阶

    1 Python基础与进阶 欢迎来到Python世界 搭建编程环境 变量 | 字符串 | 注释 | 错误消除 他只用一张图,就把Python中的列表拿下了! 使用 If 语句进行条件测试 使用字典更准 ...

  7. 5月25号开学! 第13期《python3自动化测试selenium+接口》课程,python零基础也能学

    2019年 第13期<python3自动化测试selenium+接口>课程,5月25号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:5月25号-7月28号,每周 ...

  8. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  9. 万门大学Python零基础10天进阶班视频教程

    点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...

随机推荐

  1. 用css动画写一个下红包雨的效果

    红包雨的功能相信大家都做过,不过一般都是用js计算的,闲着无聊用css的样式写了类似的,主要用的是css的transform和animation结合.大概代码逻辑: @keyframes startH ...

  2. sql:PostgreSQL9.3 Using RETURNS TABLE vs. OUT parameters

    http://www.postgresonline.com/journal/archives/201-Using-RETURNS-TABLE-vs.-OUT-parameters.html http: ...

  3. Linux菜鸟简单命令

    想要使用Linux,以下这些命令不可少的哦! 我在工作中经常用到的大多数都是一些文件的查找,和上传下载什么的,没什么技术含量,所以除了自己整理的之外,还有借鉴的别的大神的一些命令,我会在最后标注的\( ...

  4. 实现键盘记录的e.Whick和keyCode,兼容FireFox和IE

    主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,k ...

  5. Python 循环删除指定文件夹下所有的.longtian类型文件

    # -*- coding: utf-8 -*- import os #遍历文件夹删除文件 def traversing_dir(rootDir): #遍历根目录 for root,dirs,files ...

  6. PRML读书笔记——线性回归模型(上)

    本章开始学习第一个有监督学习模型--线性回归模型."线性"在这里的含义仅限定了模型必须是参数的线性函数.而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数. ...

  7. No value specified for 'Date'错误

    今天使用 BeanUtils.copyProperties(m,n);  遇到  No value specified for 'Date'  这个错误,以前用的时候都不需要加 try 今天使用发现需 ...

  8. C#多线程顺序依赖执行控制

    在开发过程中,经常需要多个任务并行的执行的场景,同时任务之间又需要先后依赖的关系.针对这样的处理逻辑,通常会采用多线程的程序模型来实现. 比如A.B.C三个线程,A和B需要同时启动,并行处理,且B需要 ...

  9. CentOS 7 yum 安装 Nginx

    1.添加Nginx到YUM源 添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7 ...

  10. SQL创建视图

    1.视图的理解 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据 .从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表 .从数据库系统内部来看,视图是由一张或多张表 ...