内容回顾 重点
一 . restful 和 APi
1. 为什么会有 Api
为了系统与系统之间的相互调用 , Api(应用程序编程接口)
2. 数据与数据的传输格式
现在大部分都是json 格式的
json : JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
以前的话还有 xml
xml : 可扩展标记语言(标准通用标记语言的子集)是一种简单的数据存储语言。
3. restful 的 十个规范
1. 根据请求方式(method)的不同, 进行不同的操作:
GET/POST/PUT/DELETE/PATCH
2, 面向资源编程
url结尾建议是名词,
htttp://www.luffycity.com/ salary(一般情况都是名词,特殊情况也可以用哪个动词,例如:login)
3. 体现版本
方式一:
http://www.luffycity.com/v1/salary
http://www.luffycity.com/v2/salary
方式二:
http://www.luffycity.com/v1/salary
http://www.luffycity.com/v2/salary
4. 体现 API
http://www.luffycity.com/v1/salary
http://api.luffycity.com/v2/salary
5. 为了安全 推荐使用 Https
6. 响应式设置状态码
200: 请求成功
300: 301 永久重定向, 302 临时重定向
400: 403, 权限问题 404 找不到页面
500: 服务器问题
这是浏览器为我们响应式提供的通用状态码,但并不是一成不变的。我们也可以自定义返回状态码。
1
|
return HttpResponse( 'abcdefg' ,status = 300 ) |
7, 条件
一般情况我们需要筛选才能得到我们想要的数据,那么就要在url中添加相应的条件。
8. 返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
https: / / www.luffycity.com / api / v2 / salary GET: 所有列表 { code: 10000 , data: [ { 'id' : 1 , 'title' : '高亮' }, { 'id' : 1 , 'title' : '龙泰' }, { 'id' : 1 , 'title' : '小东北' }, ] } POST: 返回新增的数据 { 'id' : 1 , 'title' : '高亮' } https: / / www.luffycity.com / api / v2 / salary / 1 / GET: 获取单条数据 { 'id' : 1 , 'title' : '高亮' } PUT:更新 { 'id' : 1 , 'title' : '高亮' } PATCH: 局部更新 { 'id' : 1 , 'title' : '高亮' } DELETE:删除 |
9. 返回错误信息
1
2
3
4
|
{ code: 100001 , error: 'xxx错误' } |
10、Hypermedia API
为了方便,我们会看情况在里面新添加一条url。
总结:
看完了restful规范,我们配置接口时,必须要按照规范来吗?也不一定,还是要看需求。这只是一种规范,只是建议大家按照规范来使用而已。
restful与Django无关,与rest-framework无关,它只是一种规范。
二 。 http协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
是基于socket使用Tcp协议 进行数据传输,
是短连接的,一次请求和响应一次之后断开连接;,无状态,这是由于短连接的特性所引发的现象。
数据格式:
请求首行;包含请求方法、URI、HTTP版本信息
请求体: get请求的参数 放在这里
请求体: post 请求携带的数据放在这里
第三次回顾内容
1. 什么是栈?什么是队列? 2. 笔试题:请手写一个栈和队列? # 后进先出:栈 class Stack(obejct): def __init__(self): self.data = [] def push(self,item): self.data.append(item) def pop(self): return self.data.pop() # 先进先出:队列 class Queue(obejct): def __init__(self): self.data = [] def push(self,item): self.data.insert(0,item) def pop(self): return self.data.pop() 3. 是否使用过queue 4. scrapy的调度器 队列:先进先出 -> 广度优先 栈:后进先出 -> 深度优先 5. 面向对象中的方法有几种? # #################### 函数 #################### 自定义函数 def func(arg): print(arg) 内置函数 bin max() sum() # #################### 方法 #################### class Foo(object): def __init__(self): pass def func(self): pass @classmethod def func1(cls): pass @staticmethod def func2(): pass