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方法对服务器上的资源进行操作
相关推荐
EasyDSS1 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
rufeike1 小时前
UDP协议理解
网络·网络协议·udp
江理不变情2 小时前
海思ISP调试记录
网络·接口隔离原则
世界尽头与你3 小时前
【安全扫描器原理】网络扫描算法
网络·安全
GKoSon3 小时前
加入RPC shell指令 温箱长时间监控
网络·网络协议·rpc
hgdlip4 小时前
关闭IP属地显示会影响账号的正常使用吗
网络·网络协议·tcp/ip·ip属地
Zz_waiting.4 小时前
网络原理 - 7(TCP - 4)
网络·网络协议·tcp/ip
RECRUITGUY4 小时前
用交换机连接两台电脑,电脑A读取/写电脑B的数据
服务器·网络·负载均衡
我的golang之路果然有问题6 小时前
快速上手GO的net/http包,个人学习笔记
笔记·后端·学习·http·golang·go·net