1、web application常见的功都是接口化的,最常见的即为RESTapi,REST就是一种设计API的模式。之前我们的测试页面,直接把获取的数据填入html中,是一个简单的api接口,但是返回值是个user对象。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。通过API操作数据,可以把前端和后端的代码隔离,方便测试维护。
api测试用例:
www/handler.py增加api_get_users接口,返回一个dict,后续中间件response处理返回json数据
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:LeeYY
# datetime:2019/3/19 23:55
# software: PyCharm
import re, time, json, logging, hashlib, base64, asyncio
from coroweb import get, post
from apis import Page
from models import User, Comment, Blog, next_id
# page_index>=1的证书
def get_page_index(page_str):
p = 1
try:
p = int(page_str)
except ValueError as e:
pass
if p < 1:
p = 1
return p
@get('/')
async def index(request):
users = await User.findAll()
return {
'__template__': 'test.html',
'users': users
}
@get('/api/users')
async def api_get_users(*, page='1'):
page_index = get_page_index(page)
num = await User.findNumber('id')
p = Page(num, page_index)
if num == 0:
return dict(page=p, users=())
users = await User.findAll(orderBy='created_at desc', limit=(p.offset, p.limit))
for u in users:
u.passwd = '******'
return dict(page=p, users=users)
www/apis.py 增加Page类
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# software: PyCharm
# 页面类
class Page(object):
def __init__(self, item_count, page_index=1, page_size=8):
self.item_count = item_count
self.page_size = page_size
self.page_count = item_count // page_size + (1 if item_count % page_size > 0 else 0)
if (item_count == 0) or (page_index > self.page_count):
self.offset = 0
self.limit = 0
self.page_index = 1
else:
self.page_index = page_index
self.offset = self.page_size * (page_index - 1)
self.limit = self.page_size
self.has_next = self.page_index < self.page_count
self.has_previous = self.page_index > 1
def __str__(self):
return 'item_count: %s, page_count: %s, page_index: %s, page_size: %s, offset: %s, limit: %s' % (self.item_count, self.page_count, self.page_index, self.page_size, self.offset, self.limit)
__repr__ = __str__
class APIError(Exception):
def __init__(self, error, data='', message=''):
super(APIError, self).__init__(message)
self.error = error
self.data = data
self.message = message
class APIValueError(APIError):
def __init__(self, filed, message=''):
super(APIValueError, self).__init__('value:invalid', filed, message)
class APIResourceNotFoundError(APIError):
def __init__(self, filed, message=''):
super(APIResourceNotFoundError, self).__init__('value:notfound', filed, message)
class APIPressionError(

本文介绍了在Python Web开发中如何编写RESTful API接口,强调了JSON格式在API中的重要性,并提供了具体的接口设计案例,包括用户、日志和评论的增删查改操作。通过这些接口,实现了前后端的分离,便于测试和维护。
最低0.47元/天 解锁文章
1169

被折叠的 条评论
为什么被折叠?



