1.Web API接口

接口:规定了提交请求参数的请求方式、访问其可以获取相应的反馈数据的url链接,四部分:url链接 + 请求方式 + 请求参数 + 响应数据。

1.1接口的四大特点

  • url:长得像返回数据的url链接

  • 请求方式:get、post、put、patch、delete

    • 采用get方式请求上方接口
  • 请求参数:json或xml格式的key-value类型数据

    • ak:6E823f587c95f0148c19993539b99295
    • region:上海
    • query:肯德基
    • output:json
  • 响应结果:json或xml格式的数据

    • 上方请求参数的output参数值决定了响应数据的格式

    • {
      "status":0,
      "message":"ok",
      "results":[
      {
      "name":"肯德基(罗餐厅)",
      "location":{
      "lat":31.415354,
      "lng":121.357339
      },
      "address":"月罗路2380号",
      "province":"上海市",
      "city":"上海市",
      "area":"宝山区",
      "street_id":"339ed41ae1d6dc320a5cb37c",
      "telephone":"(021)56761006",
      "detail":1,
      "uid":"339ed41ae1d6dc320a5cb37c"
      }
      ...
      ]
      }

1.2接口文档的编写:YApi

YApi是去哪网大前端技术中心的一个开源可视化接口管理平台

YApi项目可以搭建在任何本地或云服务器上,完成后台项目开发时的接口编写。为开发、测试等人员提供可视化的接口预览。

去哪同时在网上提供了YApi的测试网站:http://yapi.demo.qunar.com/,我们可以通过测试网站了解YApi是如何进行接口的编写的

  • 访问测试网站

  • 创建接口项目

  • 创建接口

  • 编写接口

1.3接口测试工具:Postman

Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。

Postman可以直接从官网:https://www.getpostman.com/downloads/下载获得,然后进行傻瓜式安装。

  • 工作面板

  • 简易的get请求

  • 简易的post请求

  • 案例:请求百度地图接口

2.接口规范(restful)

RESTful(Representational State Transfer)是目前较为流行的Web API 的设计规范,特点:简单、易上手。

2.1URL设计

2.1.1 数据的安全保障(https)

  • url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

2.1.2 接口特征表现

接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口。

2.1.3 多数据版本共存

2.1.4 数据即是资源

2.1.5 资源操作由请求方式决定

  • 操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作

  • get:获取单个或多个资源

  • post:新增单个或多个资源

    • https://api.baidu.com/books - post请求:新增一本书

      单增,提交单个数据字典,完成单增,返回单个结果对象

      群增,提供多个数据字典的数组,完成群增,返回多个结果对象
  • put:整体修改单个或多个资源

  • patch:局部修改单个或多个资源,修改方式与put完全相同,不同的是操作的资源如果有多个k-v键值对,put请求返回的字典包含所有数据,而patch请求返回的数据则可以是字典中任意的(可选择,指定的一个或多个)键值对。

  • delete:删除单个或多个资源,

单删,不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)

多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)

2.2响应状态码

网络状态码和网络状态信息捆绑出现,不要额外设置

2.2.1 正常响应

  • 响应状态码2xx

    • 200:常规请求
    • 201:创建成功

2.2.2 重定向响应

  • 响应状态码3xx

    • 301:永久重定向
    • 302:暂时重定向

2.2.3 客户端异常

  • 响应状态码4xx

    • 403:请求无权限
    • 404:请求路径不存在
    • 405:请求方法不存在

2.2.4 服务器异常

  • 响应状态码5xx

    • 500:服务器异常

2.3 响应结果

2.3.1 响应数据要有状态码、状态信息以及数据本身

数据状态码:

'''
0:成功
1:失败 1xx:具体失败信息(要在接口文档中明确写出)
2:无数据 2xx:具体无数据信息(要在接口文档中明确写出)
'''

数据状态信息

数据状态信息一般不仅仅是对数据状态码的解释,更多是对结果的描述,给前台开发者阅读的。

{
"status": 0,
"msg": "ok",
"results":[
{
"name":"肯德基(罗餐厅)",
"location":{
"lat":31.415354,
"lng":121.357339
},
"address":"月罗路2380号",
"province":"上海市",
"city":"上海市",
"area":"宝山区",
"street_id":"339ed41ae1d6dc320a5cb37c",
"telephone":"(021)56761006",
"detail":1,
"uid":"339ed41ae1d6dc320a5cb37c"
}
...
]
}

数据结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的url链接。

{
"status": 0,
"msg": "ok",
"results":[
{
"name":"肯德基(罗餐厅)",
"img": "https://image.baidu.com/kfc/001.png"
}
...
]
}

3.CBV(as_view()) 源码分析

Django项目启动,启动入口为manage.py,先加载settings文件,settings文件通过字符串反射的方法加载配置文件的属性和方法,如果我们在配置文件中将某个app注释掉在其他app中也没有导入该app的文件,那么该app在启动时将不被项目加载(也不会被编译)。

CBV的路由层:

from . import views
from django.conf.urls import url urlpatterns = [ url(r'^books/$',views.BookView.as_view()),
url(r'^books/(?P<pk>\d+)/$',views.BookView.as_view()), ]

这里as_view是BookView的基类的方法,当项目启动时as_view都做了哪些事情呢,来看as_view的源码:


@classonlymethod
def as_view(cls, **initkwargs):#类方法,所以可以类名.方法名()调用
"""
Main entry point for a request-response process.
"""
# 项目刚启动时initkwargs为空,不走下面的循环
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError("You tried to pass in the %s method name as a "
"keyword argument to %s(). Don't do that."
% (key, cls.__name__))
if not hasattr(cls, key):
raise TypeError("%s() received an invalid keyword %r. as_view "
"only accepts arguments that are already "
"attributes of the class." % (cls.__name__, key)) # 请求来了完成响应的函数
#wsgi协议将浏览器发过来的数据拆分后放入request
def view(request, *args, **kwargs):
self = cls(**initkwargs)
#类实例化的对象 #利用反射添加get请求,get和head一样
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
# 为对象添加属性
self.request = request
self.args = args #无名分组参数
self.kwargs = kwargs # 有名分组的参数 #将执行结果返回到前台
return self.dispatch(request, *args, **kwargs)
#下面两句的作用:将请求调用view的信息保存在view对象中
view.view_class = cls
#将类名添加到view的名称空间
view.view_initkwargs = initkwargs
#将as_view携带的参数添加到名称空间 # take name and docstring from class
update_wrapper(view, cls, updated=()) # and possible attributes set by decorators
# like csrf_exempt from dispatch
update_wrapper(view, cls.dispatch, assigned=()) #返回请求调用的函数地址,进行路由绑定
return view def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)

dispatch方法

    def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
#通过反射的方式判断请求的方法是否存在,如果存在就加()调用,不存在就报错
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)

4.使用pycharm查看一个py文件的成员

5.Pycharm debug窗口的使用

5.1 操作步骤:

5.1.1添加断点:直接在标记处点击鼠标左键即可。(删除断点只需再点击断点处即可)

5.1.2Debug下运行代码:先对需要找bug的部分代码打断点,然后点击工作栏的瓢虫,就进入了debug模式。

5.1.3按照所需调试进行代码调试。Debug的调试方式如下所示:

分别为:

1.show execution point (Alt+F10) 显示当前所有断点

2.step over(F8) 单步调试。

若函数A内存在子函数a时,不会进入子函数a内执行单步调试,而是把子函数a当作一个整体,一步执行。

3.step into(F7) 单步调试。

若函数A内存在子函数a时,会进入子函数a内执行单步调试。

4.step into my code(Alt + Shift +F7) 执行下一行但忽略libraries(导入库的语句)

5.force step into(Alt + Shift +F7) 执行下一行忽略lib和构造对象等 (目前感觉没什么用)

6.step out(Shift+F8)当目前执行在子函数a中时,选择该调试操作可以直接跳出子函数a,而不用继续执行子函数a中的剩余代码。并返回上一层函数。

7.run to cursor(Alt +F9) 直接跳到下一个断点

9.临时禁用断点,可以将断点全部禁用

10.快速查看与取消断点

11.在debug窗口查看所有变量的名称空间

Web API接口规范与测试方法的更多相关文章

  1. 初识web API接口及Restful接口规范

    一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...

  2. 开发笔记:用Owin Host实现脱离IIS跑Web API单元测试

    今天在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新. 之前Web API的单元测试需要进行以下的操作: 初始配置: 1)在IIS中创建一个站点指定We ...

  3. HttpClient + ASP.NET Web API, WCF之外的另一个选择

    WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...

  4. 用Owin Host实现脱离IIS跑Web API单元测试

    开发笔记:用Owin Host实现脱离IIS跑Web API单元测试   今天在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新. 之前Web API的单 ...

  5. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  6. Web Api 基于Zookeeper的服务注册与发现

    安装与差异 Zookeeper安装请参考我上篇文章 http://www.cnblogs.com/woxpp/p/7700368.html 基于Nginx的服务提供和消费 基于zookeeper的服务 ...

  7. ASP.NET Core Web API 集成测试

    本文需要您了解ASP.NET Core Web API 和 xUnit的相关知识. 这里有xUnit的介绍: https://www.cnblogs.com/cgzl/p/9178672.html#t ...

  8. ASP.NET Core Web API 集成测试中使用 Bearer Token

    在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. 在那里我使用了测试专用的Startup类, 里面的配置和开发时有一些区别, ...

  9. 使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

    最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...

随机推荐

  1. KVM虚拟化储存管理(3)

    一.KVM 存储虚拟化介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vo ...

  2. 目前最新u盘启动快捷热键一览表

    现在重装系统已不再是件难事了,一个普通的u盘就可以帮你搞定,但是对于一些新手来说在使用u盘启动盘安装系统是也许会遇到这样的小问题,面对一台新电脑时不知道该如何让电脑优先访问u盘从而进入PE系统下进行装 ...

  3. pandas 分组统计

    # coding:utf-8 import pandas as pd import numpy as np # path = r'C:\Users\wuzaipei\Desktop\桂林三金项目签到情 ...

  4. 【Linux】linux设备驱动归纳总结

    前言: (总结已经基本写完,这段时间我会从新排版和修正.错误总会有的,望能指正!) 前段时间学习了嵌入式驱动,趁着没开始找工作,这段时间我会每天抽出时间来复习. 我的总结是根据学习时的笔记(李杨老师授 ...

  5. java Proxy InvocationHandler 动态代理实现详解

    spring 两大思想,其一是IOC,其二就是AOP..而AOP的原理就是java 的动态代理机制.这里主要记录java 动态代理的实现及相关类的说明. java  动态代理机制依赖于Invocati ...

  6. sqlalchemy的join使用

    ——.先看mysql的join链接方法 #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Floa ...

  7. lambda常用方法

    一:forEach()  循环遍历 List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); costBe ...

  8. 摘抄大神对VUE 中slot-scope的深度理解

    Vue的slot-scope的场景的个人理解 这篇文章不是单纯把文档的话和api拿来翻译和演示,而是谈谈我对于slot-scope的使用场景的个人理解,如果理解错误,欢迎讨论! Vue的插槽slot, ...

  9. 检测Python程序本身是否已经在运行

    为runner.py实现一个函数,检测是否有其他的runner.py进程在正在执行? 除主要用到os模块,还用到了第三方模块psutil

  10. 禁用Win10自带截图工具快捷键(Shift+Win+S)

    由于在微信之前,多年使用QQ的缘故,已经习惯了使用Ctrl+Alt+A进行截图,虽然QQ后来还专门提供了TIM(Office-QQ),但仍然渐渐的以微信为主,TIM甚至已经很少登录,之前登录也仅仅是为 ...