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源码分析

最新文章

  1. jesperreport+ireport简单理解
  2. SharePoint:WebPartPageUserException This page has encountered a critical error
  3. selenium+python笔记2
  4. T-SQL 使用链接库向mysql导数据遇到的奇葩事件一
  5. Eclipse用法和技巧九:自动添加try/catch块2
  6. 【转】视差滚动(Parallax Scrolling)效果的原理和实现
  7. [BZOJ3680][JSOI2004]平衡点 / 吊打XXX
  8. Python:游戏:扫雷(附源码)
  9. deep learning RNN
  10. centos的防火墙相关
  11. Qt_颜色选择对话框(QColorDialog)
  12. window 系统显示svg、psd格式文件
  13. json2
  14. Filter过滤器与Session会话跟踪技术
  15. Docker与CI持续集成/CD(转)
  16. hadoop程序MapReduce之DataDeduplication
  17. C# 时间操作类
  18. Android Fragment之间的通信(用fragment替换掉XML布局文件中的一个线性布局)
  19. Navicat 连接MySQL 8.0.11 出现2059错误
  20. spring入门(二) 使用注解代替xml配置

热门文章

  1. SPI 及初始化例子
  2. 剑指offer——07用两个栈实现队列
  3. POJ1149_PIGS(网络流/EK)
  4. 001-Java命名规范
  5. 钉钉小程序----使用阿里的F2图表
  6. jq给页面添加覆盖层遮罩的实例
  7. Manager 进程间数据共享
  8. nginx的配置:目的是使用nginx反向代理后,应用程序获取用户真实ip
  9. LUOGU P1039 侦探推理 (字符串+模拟)
  10. poj2954Triangle