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方法对服务器上的资源进行操作
相关推荐
laocooon52385788643 分钟前
一台入网的电脑有6要素, 机器名,mac,ip,俺码,网关,dns,分别有什么作用
网络协议·tcp/ip·macos
xixixin_1 小时前
【Vite】前端开发服务器的配置
服务器·前端·网络
zm4 小时前
TCP 粘包
服务器·网络·php
bjbxkj4 小时前
量子隧穿:PROFINET到Ethernet ip的无损耗协议转换方案转
网络·网络协议·tcp/ip
honey ball7 小时前
R & S的EMI接收机面板
linux·运维·网络
搬码临时工9 小时前
电脑怎么远程访问服务器?4种常见的简单方法
运维·服务器·网络·异地访问
TinpeaV10 小时前
websocket入门详解
java·网络·spring boot·websocket·网络协议
爱学习的章鱼哥10 小时前
计算机网络|| 网络协议分析
网络·网络协议·计算机网络
-曾牛10 小时前
基于微信小程序的在线聊天功能实现:WebSocket通信实战
前端·后端·websocket·网络协议·微信小程序·小程序·notepad++
八月的雨季 最後的冰吻11 小时前
SIP协议栈--osip源码梳理
linux·服务器·网络·c++·网络协议