基于Python的RESTful API

本文介绍了如何使用Python的Flask框架创建RESTful API,包括使用HTTP方法处理资源、使用Flask-HTTPAuth实现基本认证,以及使用令牌认证。文章还讨论了RESTful服务的核心概念,如资源和HTTP方法,并展示了如何利用Flask-RESTful简化API的实现和数据验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配。接下来我将展示如何用Flask 框架来创建一个 RESTful 的 web service

01

什么是基于RESTful 的 web service

REST 架构的最初目的是适应万维网的 HTTP 协议。REST是什么请参考我之前的文章《IoT网络协议-CoAP》RESTful web services 概念的核心就是“资源”。资源可以用 URI 来表示。客户端使用 HTTP 协议定义的方法来发送请求到这些 URIs,当然可能会导致这些被访问的”资源“状态的改变。

HTTP 标准的方法有如下:

==========  =====================  ==================================
HTTP 方法   行为                   示例
==========  =====================  ==================================
GET         获取资源的信息         http://example.com/api/orders
GET         获取某个特定资源的信息 http://example.com/api/orders/123
POST        创建新资源             http://example.com/api/orders
PUT         更新资源               http://example.com/api/orders/123
DELETE      删除资源               http://example.com/api/orders/123
==========  ====================== =================================

REST 设计不需要特定的数据格式。在请求中数据可以以 JSON 形式, 或者有时候作为 url 中查询参数项。

02

使用Flask实现RESTful services

Flask 为 RESTful APIs 提供了一种简易的实现方式,可以针对不同的HTTP方法提供不同的函数。使用也很简单,只需要继承 flask.views.MethodView 然后重写需要的方法:GET POST PUT 等。

class DeviceEditView(MethodView):

    def get(self,id=None):  
        categories = ProtocolList.query.all()
        item = DeviceList.query.filter(DeviceList.n_id == id).all()
       ......
        return render_template('edit.html', categories=categories, item=item[0])

    def post(self,id):
        device = DeviceList.query.filter(DeviceList.n_id == id).all()[0]
       ......
        return redirect(url_for('device.device_list'))

device.add_url_rule('/edit/<int:id>',view_func=DeviceEditView.as_view('device_edit'))

最下面的add_url_rule是添加路由函数,和装饰器是一个效果

@app.route('/')
def index():
    return render_template('login.html')

我们已经完成了我们 web service 的大部分功能,但是仍然有一个问题。我们的 web service 对任何人都是公开的,这并不是一个好主意。

我们有一个可以管理我们的待办事项完整的 web service,但在当前状态下的 web service 是开放给所有的客户端。如果一个陌生人弄清我们的 API 是如何工作的,他或她可以编写一个客户端访问我们的 web service 并且毁坏我们的数据。大部分初级的教程会忽略这个问题并且到此为止。

在我看来这是一个很严重的问题,我必须指出。确保我们的 web service 安全服务的最简单的方法是要求客户端提供一个用户名和密码。在常规的 web 应用程序会提供一个登录的表单用来认证,并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值