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. 【Python开发】Lambda表达式使用

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  2. CTR点击率校准

    1. 概述 广告CTR预估过程中,正负样本比例差距较大,需要采样,但是采用后模型训练的结果是有偏的. 2. 校准方式 用逻辑回归作为激活函数

  3. linux 在线安装jdk

    1. yum -y list java* 2.yum -y install java-1.8.0-openjdk*

  4. spark教程(10)-sparkSQL

    sparkSQL 的由来 我们知道最初的计算框架叫 mapreduce,他的缺点是计算速度慢,还有一个就是代码比较麻烦,所以有了 hive: hive 是把类 sql 的语句转换成 mapreduce ...

  5. win10子系统Ubuntu重置

    重置: 在win10命令行下执行: lxrun /uninstall /full 安装: win+R打开bash 执行命令: lxrun /install /y

  6. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  7. Bicolored RBS CodeForces - 1167D (括号)

    建树, 然后高度最大值的最小值显然为$\lceil \frac{dep}{2}\rceil$, 将$>\frac{dep}{2}$的全部分出去即可. #include <sstream&g ...

  8. [Next] 五.next自定义内容

    自定义 head 这是默认的 head 这样的 head 并不能满足我们的需求.next 公开了一个内置组件,用于将元素追加到<head>标签的.我们可以通过这个自定义 head 新建 c ...

  9. String和StringBuffer的常见用法

    链接:https://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7?answerType=1&f=dis ...

  10. reduce一些方法对数组进行的处理

    reduce方法我之前都整理了知识点,不懂的可以看一下我之前的知识点,这次我们是整理了一些关于用reduce方法进行的一些对于数组的处理 1. reduce()求数组项之和 var arr = [3, ...