V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nuance2ex  ›  全部回复第 2 页 / 共 2 页
回复总数  32
1  2  
@lynskylate django rest 对标的是 flask-restful。从灵活度的角度来说,可以自由拓展;但灵活性的另一面就是封装程度低,什么都要自己实现。
顶一下,前 2 天还了解过。下个项目可以试下。
2019-02-18 08:29:11 +08:00
回复了 smallgoogle 创建的主题 Python SQLAlchemy 的方法封装有库嘛?
@sunhk25 弄一个抽象基类。所有模型都继承自基类。

class BaseModel(db.Model):
__abstract__ = True
def jsonify():
pass

楼主的问题,我想说 data 已经是数据了。data.id 已经可以读取属性了。如果是想打印结果的话,可以重写__repr__方法
2019-02-01 12:36:16 +08:00
回复了 chaleaochexist 创建的主题 程序员 请教,rest api 的设计问题,关于粒度.
@chaleaochexist

你提到的 view 层反复组装的问题,至少在 jsonapi1.0 规范中已经有解决办法,除非是特别常用的,比如婚恋网站的 male_user 和 female_user 可以定义多个 resource。其他情况,让客户端自己按需提取。

在 Flask-rest-jsonapi 中
include=xxx (同时查询外键数据)
fields=xxx,yyy (按需提取字段)
page[size]=10 (单次展示数量)
page[number]=2 (页码)
sort=name,birth_date (排序方式)
filter=[{"name":"gender","op":"eq","val":"male"}](筛选,还可以用 any 和 has 外键筛选)

以上可以理解成 restful 版本的 sql 语句
2019-02-01 12:16:14 +08:00
回复了 chaleaochexist 创建的主题 程序员 请教,rest api 的设计问题,关于粒度.
@chaleaochexist 再补充,你提到的 serializer 应该就是我提到的 Schema (过滤器)。

Resource 层中不仅只有 Schema 过滤器,还可能包括 Hook 钩子(比如 before request 钩子来验证登录状态,after request 钩子记录日志),数据层(比如可以优化 model 查询方式;可以在存入数据库前,把字符串“ 2019-02-01 ”变成 model 可以理解的 Date 类型,来避免报错;针对两个分别存放在 redis 和 mysql 的数据同时提取,合并返回等情况)。
2019-02-01 11:57:10 +08:00
回复了 chaleaochexist 创建的主题 程序员 请教,rest api 的设计问题,关于粒度.
@chaleaochexist lz 用的是什么框架?如果是 flask 的话,可以去了解一下 flask-rest-jsonapi,这个库是对 jsonapi1.0 规范进行了封装。

了解这个库,可以帮助你很好理解这些概念。

以请求 api/users 为例,数据流如下:
GET 方法:路由层->resource 层(找到对应 model )->model 层->resource 层(过滤输出)->返回结果

POST/PATCH 方法:路由层->resource 层(过滤输入)->model 层->resource 层(过滤输出)->返回结果

一,路由层:根据路由,找到对应的 resource。

二,Resource 层:即逻辑数据抽象层。关键词是“逻辑”,并非暴露实际数据库的数据,可根据业务逻辑进行自定义。因为 resource 并不一定和数据库的 model 一一对应。这句话有几层含义
1.一个 resource 可以对应一个 model,但并不意味着 model 的数据会全部返回,比如 password 字段需要经过过滤。(最正常的情况)
2.多个 resource 可以对应一个 model。比如 api/male_users, api/female_users 都对应 users,婚恋网站可能有这样的需求。
3.一个 resource 对应多个 model。比如数据库中有 2 张表(table) user 和 article。每次请求 users 返回用户最新五篇 article 的标题。
4.一个 resource 甚至可以不是数据库的 model。比如 api/sessions,当 post 的就是用户登录,如果验证成功,就返回一个 token。但数据库中并没有 sessions 的 table,验证过程是比较数据库中 user 的密码和传来的密码。

以上就是 resource 层,在 flask-rest-jsonapi 中是通过预定义 schema 来实现的,schema 可以理解成 resource 的 table,输入输出都会经过 schema 过滤。

[关于 serialize 和 deserialize]
Resource 中 Schema 过滤的过程就是 serialize (输出过滤)和 deserialize (输入过滤)的过程。
1 输入过滤:通过 deserialize 就是把远程传过来(可能脏的)数据变成 python 的字典对象。
2 输出过滤:通过 serialize 就是把 python 对象变成格式化的字符串返回给客户端。
2019-01-31 17:33:41 +08:00
回复了 chaleaochexist 创建的主题 程序员 请教,rest api 的设计问题,关于粒度.
lz 可以了解下 jsonapi 1.0 规范。推荐 4 楼的方法。4 楼的方法就是在规范当中的。
2018-12-16 00:16:41 +08:00
回复了 heywin 创建的主题 程序员 7 万多条的 json 如何储存检索
70000 多条用 pandas 就可以了

pd.read_json 秒秒钟转好格式,
再直接调用 plt 调好参数函数可视化。

最后,
如果只是自用,可以调用 to_csv 保存
如果想持久话,用 to_sql
2018-08-12 09:04:08 +08:00
回复了 lsylsy2 创建的主题 全球工单系统 阿里小号浙江归属地全跪了,收不到短信
杭州小号已挂
2018-08-12 09:02:21 +08:00
回复了 lsylsy2 创建的主题 全球工单系统 阿里小号浙江归属地全跪了,收不到短信
真的。看到最近的消息还是前天!
2018-08-01 16:54:54 +08:00
回复了 AxtonYao 创建的主题 分享创造 隔了半年重构了个人页
很 hardcore.
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5931 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
Developed with CodeLauncher
♥ Do have faith in what you're doing.