网站搭建笔记精简版---廖雪峰WebApp实战-Day9:编写API笔记

本文详细解释了WebAPI的概念,以及如何通过API隔离前后端代码,提高代码测试性和前端编写效率。同时,介绍了APIError及其子类在API调用错误时的作用,确保错误信息的友好展示。

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

什么是web API?

如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。

编写API有什么好处呢?

由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。

API函数

一个api也是一个网页处理函数,因此将下列代码加到handlers.py文件中。

@get('/api/users') # 当遇到后缀名为/aip/users的网页时,执行以下代码
def api_get_users(*, page='1'):
    page_index = get_page_index(page)
    num = await User.findNumber('count(id)')
    p = Page(num, page_index)
    # 要是没有user的话,返回空
    if num == 0:
        return dict(page=p, users=())
    users = await User.findAll(orderBy='created_at desc', limit=(p.offset, p.limit))
    # 有user的话,返回所有信息,并将密码覆盖为'******'
    for u in users:
        u.passwd = '******'
    return dict(page=p, users=users)

上述函数返回的为dict,之后的response该middleware可将结果转化为json文件并返回。

API Error函数

当api调用错误的时候,系统会默认返回一个数字,这样不友好,因此提出需要将返回值设置为字符串,将其放入文件apis.py中。内容如下。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Michael Liao'

'''
JSON API definition.
'''

import json, logging, inspect, functools
# 基础错误
class APIError(Exception):
    '''
    the base APIError which contains error(required), data(optional) and message(optional).
    '''
    def __init__(self, error, data='', message=''):
        super(APIError, self).__init__(message)
        self.error = error
        self.data = data
        self.message = message
# 输入值无效
class APIValueError(APIError):
    '''
    Indicate the input value has error or invalid. The data specifies the error field of input form.
    '''
    def __init__(self, field, message=''):
        super(APIValueError, self).__init__('value:invalid', field, message)
# 资源未发现,数据库里没有这个东西
class APIResourceNotFoundError(APIError):
    '''
    Indicate the resource was not found. The data specifies the resource name.
    '''
    def __init__(self, field, message=''):
        super(APIResourceNotFoundError, self).__init__('value:notfound', field, message)
# 没有权限
class APIPermissionError(APIError):
    '''
    Indicate the api has no permission.
    '''
    def __init__(self, message=''):
        super(APIPermissionError, self).__init__('permission:forbidden', 'permission', message)

最后在浏览器输入http://localhost:9000/api/users即可完成awesome数据库中user表查询。

参考博客
廖雪峰的官方网站
源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值