Web API接口

什么是Web API接口

我们来看下面的两个url例子:那个看起来更像是接口?

https://www.baidu.com
https://api.map.baidu.com/search

明显第二个网址看起来更像是接口。

第一个url返回网页,叫网址

第二个返回数据,叫接口

那么接口就是通过规定的请求方式访问的url链接

接口规定了提交请求参数的请求方式,访问其可以获取响应的数据

Web API 接口和一般的url链接还是有区别的,Web API接口简单概括有以下四大特点

接口四大特征

  • url链接:长得像返回数据的url链接(https://api.map.baidu.com/place/v2/search)
  • 请求方式:get、post、put、patch、delete
  • 请求参数:请求携带的参数或者数据包(parmas or body)
  • 响应数据:json或xml格式的数据
通过访问以下接口并携带参数,可以返回想要的数据:
https://api.map.baidu.com/place/v2/search?ak=hwXbwDEvhyGtKwmh6IMhRWyeOoilo7Uv&region=上海&query=肯德基&output=json ak:应用唯一标识码
region:搜索地区
query:搜索地点
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"
}
...
]
}

接口文档的编写测试

  • yapi接口文档工具(web在线接口编写工具)
  • postman接口测试工具

restful接口规范

REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。

以webService为例通俗解释,我们需要编写一个功能的时候以往我们都会这么写:

http://localhost:8080/admin/getUser (查询用户)

http://localhost:8080/admin/addUser (新增用户)

http://localhost:8080/admin/updateUser (更新用户)

http://localhost:8080/admin/deleteUser (删除用户)

以不同的URL(主要为使用动词)进行不同的操作。

Rest架构:**

GET http://localhost:8080/admin/user (查询用户)

POST http://localhost:8080/admin/user (新增用户)

PUT http://localhost:8080/admin/user (更新用户)

DELETE http://localhost:8080/admin/user (删除用户)

总结:URL只指定资源,以HTTP方法动词进行不同的操作。用HTTP STATUS/CODE定义操作结果。

Restful:遵守了rest风格的web服务便可称为Restful。

为什么需要Restful?

  • url链接具有很强的可读性
  • 规范化请求和响应
  • 资源描述与视图的解耦合
  • 提高交互性,方便为第三方服务提供服务
  • 提供无状态的服务接口,降低复杂度,提高应用的水平扩展性。

RESTful作为目前最流行的API设计规范,一定有着它独有的魅力:强大、简洁、易上手

那么RESTful规范有哪些呢?

请往下看:

url链接设计

  • 接口采用https协议,保证数据安全
  • 接口使用特定关键字(api)表示
  • 接口操作的数据称之为资源,体现资源名词,尽量不体现操作资源动词(如特殊的比如登录可以使用动词)
  • 接口资源多版本共存使用特定关键字(v1、v2)区分版本
  • 接口群操作限制条件使用?

五大请求方式

  • get:获取单个或多个资源
  • post:新增单个或多个资源
  • put:整体修改单个或多个资源
  • patch:局部修改单个或多个资源
  • delete:删除单个或多个资源,不做任何资源返回

响应结果

  • 应包含网络状态码 (200,201)
  • 应包含数据状态码(0成功,1失败,2无数据)
  • 应包含数据状态信息(对数据的描述)
  • 应包含数据结果(results,常量、数组、字典),若存在图片资源则是url的请求链接

DRF框架安装

我们在了解了Web API接口和RESTful接口规范后,我们要在后端使用这个RESTful规范我们要先安装这个框架

DRF即-- django-restframework

DRF是Django的插件,所以必须确保安装了Django

pip3 install djangorestframework

使用DRF时,要在settings中注册

INSTALLED_APPS = (
...
'rest_framework',
)

基于原生Django实现十大接口

我们已经知道了五大请求方式,基于五大请求方式,我们可以对请求进行 单|群 操作

api/urls.py

from django.conf.urls import url

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

api/models.py

from django.db import models

class Book(models.Model):
name = models.CharField(max_length=64)
price = models.DecimalField(max_digits=5, decimal_places=2)

api/views.py

from django.http import JsonResponse
from django.views import View # 一个视图类可以保护常规五个请求方法:get|post|put|patch|delete
# 五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删 from . import models
class BookView(View): def _single_get(self, pk):
book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
if not book_dic:
return JsonResponse({
'status': 1,
'msg': '单查 资源不存在',
})
return JsonResponse({
'status': 0,
'msg': '单查 ok',
'results': book_dic
})
def _many_get(self):
book_query = models.Book.objects.values('name', 'price')
book_list = list(book_query)
return JsonResponse({
'status': 0,
'msg': '群查 ok',
'results': book_list
}) def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if pk: # 单查
return self._single_get(pk)
else: # 群查
return self._many_get() def post(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'post ok'
}) def put(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
}) def patch(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'patch ok'
}) def delete(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'delete ok'
})

Django CBV源码分析

DRF初识的更多相关文章

  1. DRF初识与序列化

    一.Django的序列化方法 1.为什么要用序列化组件 做前后端分离的项目,我们前后端数据交互一般都选择JSON,JSON是一个轻量级的数据交互格式.那么我们给前端数据的时候都要转成json格式,那就 ...

  2. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

  3. day81 初识drf

    目录 一.web应用模式 二.API接口 1 rpc(远程过程调用/远程服务调用) 2 restful(资源状态转换) 三.RESTful API规范 四.序列化 五.Django Rest_Fram ...

  4. DRF 视图初识

    from django.shortcuts import render from rest_framework.generics import ListAPIView,CreateAPIView,Up ...

  5. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  6. DRF的认证,频率,权限

    1,DRF的认证 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一 ...

  7. drf

    跨域同源 django做跨域同源 需要把csrf去掉 跨站请求伪造 同源 同源机制:域名.协议.端口号相同的同源 简单请求 不写头部请求 跨域会拦截报错缺少请求信息 (1) 请求方法是以下三种方法之一 ...

  8. drf源码系列

    过滤器 对查询出来的数据进行筛选可写可不写 from rest_framework.filters import BaseFilterBackend 源码 ''' def filter_queryse ...

  9. drf框架 - JWT认证插件

    JWT认证 JWT认证方式与其他认证方式对比: 优点 1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小 2)服务器存储的是 签发和校验token 两段算法,签发认证的效 ...

随机推荐

  1. class10_Frame 框架

    最终运行效果图(程序见序号2):   #!/usr/bin/env python # -*- coding:utf-8 -*- # ---------------------------------- ...

  2. GIT学习记录4(标签管理与自定义git)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  3. seo具备的条件

    对于SEO这行业,许多想学习这一行,但是并非每一个人都有这样才能.因为SEO份这行靠是真材实料并非虚拟人才.现在找到高工资的SEO人才需要 有三年以上经验,熟悉PHP.html.asp.java等等这 ...

  4. 今天真的很SB

    在公司Review系统网页上,写了一篇几百字的作文, 然后突然手一抖,竟然没有保存就切换页面了, 赶快退回来...没了,啥都没了... 怎么办... 还好洒家N久之前看了一本什么什么杂七杂八的书, 里 ...

  5. Web介绍

    web概念概述 javaWeb: 使用java语言开发基于互联网的项目 软件架构: 1.C/S:Client/Server 客户端/服务器端 2.B/S:Browser/Server 浏览器/服务器端 ...

  6. 2018-8-10-WPF-使用-Direct2D1-画图-绘制基本图形

    title author date CreateTime categories WPF 使用 Direct2D1 画图 绘制基本图形 lindexi 2018-08-10 19:16:53 +0800 ...

  7. 随笔记录 linux命令 2019.7.29

    系统命令 一. type   查看命令是内部命令还是内部命令 help   帮助 man   在线帮助 cd      切换目录 pwd    查看所在路径 stat     查看文件详细信息 ls  ...

  8. 【学术篇】一些水的不行的dp

    最近做了几道非常水非常水的dp...... 之后刷的一些水dp也会写在这里...... 此篇题目难度不递增!!! Emmmm....... 1.luogu1043数字游戏 以前看过这个题几遍,没做这个 ...

  9. cacti ERROR: FILE NOT FOUND

    Cacti 版本: 0.8a 在安装好 cacti之后,进入Settings -> Paths, 而且里面的路径在系统中都存在的,在这里显示ERROR: FILE NOT FOUND 参考1的博 ...

  10. ForkJoin学习笔记

    1.Fork/Join框架:(分治算法思想) 在必要的情况下,将一个大任务,进行拆分(fork) 成若干个子任务(拆到不能再拆,这里就是指我们制定的拆分的临界值),再将一个个小任务的结果进行join汇 ...