博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01: RestfulAPI与HTTP
阅读量:4693 次
发布时间:2019-06-09

本文共 4126 字,大约阅读时间需要 13 分钟。

1.1 RestfulAPI与HTTP简介

  1、什么是RestfulAPI

      1、REST直接翻译:表现层状态转移,实质就是一种面向资源编程的方法

      2、REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口)
      3、RestfulAPI中认为网络上所有的东西都是一种资源,对这些资源操作时无非就是增删改查
      4、网络上的资源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替资产资源
      5、根据发送请求的method方法判断如何操作这些资源
        GET(SELECT):             从服务器取出资源(一项或多项)。
        POST(CREATE):           在服务器新建一个资源。
        PUT(UPDATE):             在服务器更新资源(客户端提供改变后的完整资源)。
        DELETE(DELETE):       从服务器删除资源。
        PATCH(UPDATE):         在服务器更新资源(客户端提供改变的属性)。

   2、HTTP的第一行包含三个信息:谓词URLHTTP协议版本。三个数据使用空格隔开

        POST http://comet.chouti.com/comet/connect HTTP/1.1

    1、谓词(POST)

        1. WEB API就是使用谓词作为默认的路由方式,最常用的谓词有:POST\DELETE\PUT\GET,这四个谓词对应了“增、删、改、查”四个动作

        2. 其中,GET,DELETE不包含BODY,PUT,POST可以包含BODY

    2、URl

        1. 网络上的资源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替资产资源

    3、HTTP协议版本

        1. HTTP的第一行内容就是这些: POST http://comet.chouti.com/comet/connect HTTP/1.1

        2. 接下来会有一个\r\n来进行换行,接下来就是HTTP HEAD部分,HTTP HEAD描述了HTTP请求和响应。
        3. HTTP HEAD即为HTTP协议中最重要的部分,他包含了编码、BODY长度、内容协商等信息,你也可以包含一些自定义信息

  3、RestFul API中常用的HEAD信息   

      1. User-Agent:用户代理,是什么客户端发出的请求,如IE、Chrome、Fiddler等

      2. HOST:域名
      3. Authorization:验证信息
      4. Accept:接受何种序列化方式返回的数据,用MIME表示,用于对响应数据的内容协商,
          可以包含多个MIME,按优先顺序排列,如application/json,application/xml,text/html
      5. Content-Type:使用一个MIME表示,表示所发送请求的Body的序列化方式,常见的如application/json,
          还有WEB交互最常使用的application/x-www-form-urlencoded,都表示了你的body部分的序列化方式,在请求、响应中都会出现
      6. HTTP HEAD部分是HTTP协议中最核心的部分,可配置向非常多这里就不列举了
      7. 响应部分也分为头部和Body,响应头部和请求头部最大的不同在于响应首行存在一个HTTP Code
          HTTP Code作为API的调用状态的展示,也很重要,在REST API中最常用的状态码一般为2XX,4XX,5XX三个段
      8. 在首部之后有一个空行(\r\n)接下来就是Content,这里有具体的业务数据,根据不同的Content-Type使用不同的序列化方式表示,例如JSON,XML,甚至HTML

  4、用一张图为大家展示一下这些知识 

              

1.2 RestfulAPI使用举例

   1、创建django项目testRestfulAPI

from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^asset/', views.AssetView.as_view()),]
urls.py
from django.shortcuts import HttpResponsefrom django.views import Viewimport jsonclass AssetView(View):    def get(self,request):                # 返回查询信息        print('response_select',request.META.get('HTTP_HOSTNAME'))     # c1.com        return HttpResponse(json.dumps({
'status':'ok','method':'select'})) def post(self,request): # 创建 print('response_create',request.body) # {"hostname": "c1.com"} return HttpResponse(json.dumps({
'status':'ok','method':'create'})) def put(self,request): # 更新 print('response_update',request.body) # {"hostname": "c1.com"} return HttpResponse(json.dumps({
'status':'ok','method':'update'})) def delete(self,request): # 删除 print('response_delete',request.body) # {"hostname": "c1.com"} return HttpResponse(json.dumps({
'status':'ok','method':'delete'}))
views.py

  2、创建文件test.py使用requests模块模拟增删改查(注释服务器端csrf)

import requests# 1、查询response_select = requests.get('http://127.0.0.1:8000/asset/',                        headers={
'hostname':'c1.com'}, )print('response_select',response_select.json()) # {'method': 'select', 'status': 'ok'}# 2、创建response_create = requests.post('http://127.0.0.1:8000/asset/', headers='', json={
'hostname':'c1.com'} )print('response_create',response_create.json()) # {'status': 'ok', 'method': 'create'}# 3、更新response_put = requests.put('http://127.0.0.1:8000/asset/', headers='', json={
'hostname':'c1.com'} )print('response_update',response_put.json()) # {'method': 'update', 'status': 'ok'}# 4、删除response_delete = requests.delete('http://127.0.0.1:8000/asset/', headers='', json={
'hostname':'c1.com'} )print('response_delete',response_delete.json()) # {'status': 'ok', 'method': 'delete'}
test.py

 

转载于:https://www.cnblogs.com/xiaonq/p/8309200.html

你可能感兴趣的文章
三目表达式如何省略一个表达式
查看>>
python 的记忆功能,用于递归函数, lru_cache()
查看>>
程序员/PM怎么让项目预估的时间更加准确
查看>>
陌上花开(bzoj 3262)
查看>>
创建包含多个子网的虚拟网络
查看>>
jdbc事务管理
查看>>
虽然他们说是水题,但我觉得思想蛮好的
查看>>
memcache 入门学习资料
查看>>
库存扣多了,到底怎么整 | 架构师之路
查看>>
服务器换了一组硬盘后,读取不到硬盘数据,开不了机
查看>>
【IT笔试面试题整理】链表
查看>>
分页插件
查看>>
【miscellaneous】海康威视监控摄像头实现web端无插件监控实拍效果
查看>>
【编程开发】数字签名原理简介
查看>>
【ARM-Linux开发】ti CMEM使用
查看>>
【C/C++开发】emplace_back() 和 push_back 的区别
查看>>
原装win8系统电脑崩溃问题解决
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
PeekMessage、GetMessage的区别
查看>>
[疑难杂症]解决实际开发中各种问题bug
查看>>