HTTP相关

目录

一、HTTP状态码

1XX信息性状态码

2XX成功状态码

3XX重定向状态码

4XX客户端错误状态码

5XX服务器错误状态码

二、GET/POST/PUT/DELETE请求

2.1GET

2.2POST

2.3PUT

2.4DELETE

2.5RESTful API例子

三、RESTful API

3.1什么是RESTful 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例子

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方法对服务器上的资源进行操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是洋洋a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值