HTTP相关

目录

一、HTTP状态码

1XX信息性状态码

2XX成功状态码

3XX重定向状态码

4XX客户端错误状态码

5XX服务器错误状态码

二、GET/POST/PUT/DELETE请求

2.1GET

2.2POST

2.3PUT

2.4DELETE

[2.5RESTful API例子](#2.5RESTful API例子)

[三、RESTful API](#三、RESTful API)

[3.1什么是RESTful API](#3.1什么是RESTful API)

[3.2RESTful API中的关键概念](#3.2RESTful API中的关键概念)


一、HTTP状态码

1XX信息性状态码

  • 100 Continue:客户端应继续其请求。服务器仅接收到部分请求,但是希望客户端继续发送其余部分。

2XX成功状态码

  • 200 OK:请求成功,服务器已成功处理了请求,通常会在响应体中返回请求的资源
  • 201 Created:请求成功并且服务器创建了新的资源,通常在创建新对象或记录时返回
  • 204: No Content:请求成功,但服务器没有返回任何内容,常用于只需要执行服务器端操作不需要返回数据的情况

3XX重定向状态码

  • 301 Moved Permanently:请求的资源已被永久移动到的新的URL,浏览器应自动重定向到新的URL
  • 302 Found:请求的资源临时移动到新的URL,浏览器应临时重定向到新的URL
  • 304 Not Modified:客户端发送了附带条件的请求,服务器发现资源未被修改,因此返回此状态码,让客户端使用缓存的资源

4XX客户端错误状态码

  • 400 Bad Request:客户端发送的请求有语法错误,服务器无法理解
  • 401 Unauthorized:客户端需要进行身份验证才能访问资源,通常在未提供有效的身份凭证或凭证无效时返回
  • 403 Forbidden:服务器理解请求,但拒绝执行该请求,客户端没有足够的权限访问资源
  • 404 Not Found:服务器无法找到请求的资源,通常是因为URL输入错误或资源已被删除

5XX服务器错误状态码

  • 500 Internal Server Error:服务器内部发送错误
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了无效的响应
  • 503 Service Unavailable:服务器暂时无法处理请求,通常由于服务器过载或正在维护

二、GET/POST/PUT/DELETE请求

2.1GET

GET请求向指定资源发出请求,请求中包含了资源的URL和请求参数。

使用GET 请求方式提交的数据会被包含在URL中,因此易于被缓存和浏览器保存,也因此不适合用于提交敏感数据

由于GET 通过URL 提交数据,那么GET 可以提交的数据量与URL长度 有直接关系。实际上,URL 不存在参数上限的问题,HTTP协议规范没有对URL 长度进行限制,对URL有限制的是不同的浏览器。因此GET可以提交的数据量取决于浏览器对URL长度的限制

2.2POST

POST 请求提交的方式会被包含在请求体中,而不像GET 请求方式那样包含在URL 中,因此POST请求可以提交比GET更大的数据量

理论上讲,POST是没有大小限制的

POST 起限制作用的是服务器的处理程序的处理能力,如果服务器可以处理100MB的数据量,俺么这个POST 请求包体的大小就是100MB

2.3PUT

PUT请求用于向服务器更新指定资源,可以理解为对服务器上的资源进行修改操作

2.4DELETE

DELETE请求用于请求服务器删除指定的资源,可以理解为对服务器上的资源进行删除操作

2.5RESTful API例子

下面是一个Flask 搭建的一组GET/POST/PUT/DELETE 请求的RESTful API例子

python 复制代码
from flask import Flask, jsonify, request
app = Flask(__name__)
# 模拟的书籍列表
books = [
    {
        'id': 1,
        'title': 'Python Crash Course',
        'author': 'Eric Matthes'
    },
    {
        'id': 2,
        'title': 'Clean Code',
        'author': 'Robert C. Martin'
    }
]
# 获取所有书籍
@app.route('/books', methods=['GET'])
def get_books():
    response = {
        "status": 200,
        "data": books
    }
    return jsonify(response), 200
# 根据 ID 获取单本书籍
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = next((book for book in books if book['id'] == book_id), None)
    if book:
        response = {
            "status": 200,
            "data": book
        }
        return jsonify(response), 200
    response = {
        "status": 404,
        "message": "Book not found"
    }
    return jsonify(response), 404
# 添加一本新书
@app.route('/books', methods=['POST'])
def add_book():
    new_book = request.get_json()
    if not new_book or 'title' not in new_book or 'author' not in new_book:
        response = {
            "status": 400,
            "message": "Invalid book data"
        }
        return jsonify(response), 400
    new_book['id'] = max([book['id'] for book in books]) + 1 if books else 1
    books.append(new_book)
    response = {
        "status": 201,
        "data": new_book
    }
    return jsonify(response), 201
# 根据 ID 更新书籍信息
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    book = next((book for book in books if book['id'] == book_id), None)
    if not book:
        response = {
            "status": 404,
            "message": "Book not found"
        }
        return jsonify(response), 404
    updated_data = request.get_json()
    if not updated_data:
        response = {
            "status": 400,
            "message": "Invalid update data"
        }
        return jsonify(response), 400
    book.update(updated_data)
    response = {
        "status": 200,
        "data": book
    }
    return jsonify(response), 200
# 根据 ID 删除书籍
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    global books
    books = [book for book in books if book['id'] != book_id]
    response = {
        "status": 200,
        "message": "Book deleted successfully"
    }
    return jsonify(response), 200
if __name__ == '__main__':
    app.run(debug=True)

三、RESTful API

3.1什么是RESTful API

首先,RESTful API 并不是一种约束 ,仅仅是一种风格,它基于HTTP协议,利用HTTP的各种方法和URL 来实现资源的创建、读取、更新、删除等操作

简单来说:

  • GET(SELECT):GET请求被用于获取资源,相当于数据库的SELECT
  • POST(INSERT):POST请求用于增加资源,相当于数据库的INSERT
  • PUT(UPDATE):PUT请求用于修改资源,相当于数据库的UPDATE
  • DELETE(DELETE):DELETE请求用于删除资源,相当于数据库的DELETE

3.2RESTful API中的关键概念

  • 资源(Resource):在RESTful API中,任何可以被唯一标识的事物都可以被视为资源,如用户、文章等。每一个资源都有一个唯一的URL作为标识符
  • **表述(Representation):**资源在客户端和服务器之间传递的形式(JSON)
  • 状态转移(State Transfer):客户端通过HTTP方法对服务器上的资源进行操作
相关推荐
游戏开发爱好者81 小时前
iOS重构期调试实战:架构升级中的性能与数据保障策略
websocket·网络协议·tcp/ip·http·网络安全·https·udp
(:满天星:)5 小时前
第31篇:块设备与字符设备管理深度解析(基于OpenEuler 24.03)
linux·运维·服务器·网络·centos
野蛮人6号6 小时前
虚拟机网络编译器还原默认设置后VMnet8和VMnet1消失了
网络·vmware·虚拟机网络编译器·vmnet8消失
scuter_yu7 小时前
主流零信任安全产品深度介绍
运维·网络·安全
江苏思维驱动智能研究院有限公司7 小时前
Sophos 网络安全:全球领先的自适应安全解决方案提供商
网络·安全·web安全
面朝大海,春不暖,花不开7 小时前
Java网络编程:TCP/UDP套接字通信详解
java·网络·tcp/ip
ChicagoTypewriter7 小时前
计算机网络中的常用表项梳理
网络·计算机网络·智能路由器
DemonAvenger8 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
Bruce_Liuxiaowei10 小时前
常见高危端口风险分析与防护指南
网络·网络安全·端口·信息搜集
tmacfrank11 小时前
Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
android·网络·https