现在市面上的开源框架, 不管是 tornado, django 或者 flask. 写起 API 总感觉没有 Nodejs 中的 hapijs 框架爽, 根据 hapijs 的设计原理, 我设想了下面的写法. 大家一起来讨论. 基于配置的方法去写接口感觉真的很舒适. 部分代码如下. (框架还没有, 只是设想. )
app.js
from api import *
from .apis.post import post
from .apis.user import user
from .plugins.my_plugin import MyPlugin
app = App()
app.plugin(MyPlugin)
app.plugin(AuthorizationPlugin('jwt'))
app.publish(user)
app.publish(post)
app.start(port=3000)
user.js
from api import *
from .services.user import UserService
user = BluePrint()
user.role('admin')
@user.cache({
'expires_in': 30 * 1000,
'privacy': 'private'
})
@user.query({
'name': Field().string()
})
@user.role('all')
@user.get('/')
def list(self, request):
users = UserService.list(**request.query)
return Response(users)
@user.cache({
'expires_in': 30 * 1000,
'privacy': 'private'
})
@user.params({
'id': Field().string()
})
@user.role('login_user')
@user.get('/{id}')
def retrieve(self, request):
user = UserService.retrieve(id=request.params[id])
return Response(user)
@user.payload({
'name': Field().string()
})
@user.role('admin')
@user.post('/')
def create(self, request):
user = UserService.create(request.payload)
return Response(user)
@user.payload({
'name': Field().string()
})
@user.params({
'id': Field().string()
})
@user.role('admin')
@user.patch('/{id}')
def update(self, request):
user = UserService.update(id=request.params[id], payload=request.payload)
return Response(user)
@user.payload({
'name': Field().string()
})
@user.params({
'id': Field().string()
})
@user.role('admin')
@user.put('/{id}/name')
def replace_name(self, request):
user = UserService.update(id=request.params[id], payload=request.payload)
return Response(user)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.