9888_架空500程序员.txt
Edited: Thursday 1 May 2025

03:25 se e a 目 字 @ ( 外
完 成 《 ˇ > “ 大 4 不 安 全 一 wwj718.github.io G “ 自 @

一 一 一 / 一 一
矛叉 千〕_人 Home Archives Tags Categories About-Me
如 何 架 安 经 帕 5oo 的 后 端 程 序 员
31 May 2016 . 工
当 你 知 道 目 己 要 做 什 么 , 才 以 在 适 合 你 的 工 具 。 这 个 时 候 , 你 与 捷 径 仁 有 github 的 距 离 -by 我 ( 偶 尔
500 的 后 端 程 序 员 )
上 边 这 句 话 , 可 以 看 做 对 “ 没 有 银 弹 “ 的 一 种 解 读
创 世 初 , 荆 棘 遗 地 , 百 废 待 兴 , 先 民 试 图 通 过 发 明 一 种 新 的 编 程 语 言 , 来 救 济 陷 入 沼 泽 的 巨 兽 , 一 时 间 , 倚
天 屠 龙 , 寒 光 夺 目 , 庙 堂 、 江 湖 , 英 雄 辈 出 。
直 到 后 来 , 人 类 发 现 甚 至 就 “php 是 不 是 最 好 的 语 言 “ 都 无 法 达 成 一 致 , 拉 黑 取 关 , 火 把 相 向
人 们 才 痛 心 疾 首 地 发 现
没 有 银 弹
对 这 段 历 史 有 更 多 兴 趣 的 同 学 可 以 目 行 坠 崖 , 以 获 上 古 秘 籍 《 人 月 神 话 》 于 山 洞
如 果 你 想 要 的 是 ,“ 最 强 大 最 好 的 最 快 的 通 用 后 端 “, 那 你 可 以 关 掉 网 页 看 冰 与 火 之 歌 去 啦 ! “( 这 周 的 更 新
啦 ! 威 谢 川 铁 ~) 、 如 果 你 只 星 露 要 一 个 妹 巨 的 柳 象 数 椎 存 偷 服 务 、 有 一 船 的 身 价 验 评 、 版 末 诶 增 的 功 能 .
03:25
7 月 E AE T 奂 【 7 JFJJT 52RJR 仪 I 朋 H25 , 月 “RRRJ 对 1 3 , A AE 目 JJBE ,
l 又 或 者 如 果 你 喜 欢 google 的 firebase 这 类 东 西 ( 什 么 ? 你 还 不 知 道 firebase 这 种 神 器 ? ! google! ) , 那 么 你
说 不 定 会 喜 欢 我 要 推 荐 的 这 个 东 西
不 安 全 一 wwj718.github.io
a 目字 @ 1 外
kinto
我 将 kinto 看 做 python 的 BaaS(Backend as a Services) 实 现 , 你 可 以 把 乙 看 做 一 个 json server, 如 果 你 用 过
json-server, 你 应 该 对 它 很 有 好 感 ,json-server 是 我 最 喜 欢 的 工 具 之 一 , 如 果 你 对 它 不 了 解 可 以 查 看 我 之 前
的 这 篇 文 章 : 使 用 json-server 来 帮 助 前 后 端 分 离 , 但 是 json server 仅 仅 是 个 作 为 测 试 用 的 server, 不 具 备 作 为
BaaS 的 能 力 , 首 先 它 没 有 身 份 的 概 念 , 任 何 用 户 可 以 改 写 数 据
kinto 支 持 用 尸 身 份 认 证 , 支 持 细 粘 度 的 权 限 , 支 持 建 议 的 查 询 , 支 持 数 据 验 证 , 乙 与 同 类 产 品 的 比 较 可 以 看
这 里 :How does Kinto compare to other solutions, 你 可 以 把 它 看 做 生 产 可 用 的 json 一 server
demo
这 是 官 方 的 demo, 我 们 也 可 以 目 行 搭 建
test by httpie/postman

1 “echo“《“data“: 《“description“:“Write a tutorial explaining Kinto“,“status“: “todo“} “ |
http _P05T https://Kinto,dev.mozaws,net/v1/buckets/defautt/ cottections/taSks/ recordS ˇ
-vy –auth “wwj:wwj-secret「
response 为 :
JSON

2 wdata“
“descrlptlon“: “Write a tutorial expLaining _Kinto“,
“id“: “0d59f3db-0c5b-449a-8d12-e3408311ae8b“,
“Last_modified“: 1464699969634,

林仪 人 标 命 园 吴 吴 吴

03:25 口 吊 F “ , 林孙 e
~ ’ 不 安 全 一 wwj718.github.io
a 山 字 @ ( 乡
test by httpie/postman

1 “echo“《“data“: 《“description“:“Write a tutorial explaining Kinto“,“status“: “todo“} “ |
http _P05T https://Kinto,dev.mozaws,net/v1/buckets/defautt/ cottections/taSks/ recordS ˇ
-y –auth “wwj:wwi-secret「
response 为 :
w

2 “data“: {
3 “description“:“Write a tutorial expLaining Kinto“)
小 “id“: “8d59f3db-@c5b-449a-~8d12-e3408311ae8b“,
5 “Last_modified「“: 1464699969634,
6 “status “ “todo“「
7 了 ,
8 “permissions“:
9 write“: [
10 “basicauth:d6b8c4bd7214846a9b8c89842a2599bb299df8e68594b69ce18a63c6facec586“
11 ]
12 }
13 丁
我 们 来 看 看 我 们 存 下 的 数 据 还 在 不 在
Bash
http “https://XKinto,dev,mozaws,net/v1/buckets/defautt/cottections/taSks/ recordS ˇ
-y –auth “wwj:wwi-secret「
哈 哈 , 数 据 被 存 下 了
我 们 也 可 以 在 kinto-admin 中 可 以 使 用 web 界 面 来 管 理 我 们 提 交 的 东 西
聪 明 的 你 一 跋 发 现 了 , 我 们 可 以 在 任 何 时 候 任 何 client 里 保 存 这 些 数 据 , 这 样 一 来 , 我 们 可 以 不 没 有 后 端 的 应
用 !

03:25 国 国 国 园 园 园 园 园 园 园 许 园 许 沥 许 园 刑 刑 园 园 园 许 园 园 许许 园 园 园 园 许 沥 a 山 云 @ 1
不 安 全 一 wwj718.github.io
合 昊 , 敌 挣 佶 仔 下 一
我 们 也 可 以 在 kinto-admin 中 可 以 使 用 web 界 面 来 管 理 我 们 提 芸 的 东 西
聪 明 的 你 一 跋 发 现 了 , 我 们 可 以 在 任 何 时 候 任 何 client 里 保 存 这 些 数 据 , 这 样 一 来 , 我 们 可 以 不 没 有 后 端 的 应
用 !
如 果 你 熟 悉 restful 风 格 的 接 口 , 上 边 的 请 求 url 你 应 该 好 不 陌 生
https://Kinto,dev.mozaws,net/v1/buckets/defautt/cotlections/tasks/ records ,
buckets/collections 和 tasks 都 是 命 名 空 间 而 已 , 你 可 以 往 里 构 建 你 的 数 据 框 架 , 就 像 在 数 据 库 里 建 库 建 表 一

dont be shy, 别 被 条 条 框 框 束 缚 , 放 手 去 做 吧
文 档

更 多 的 用 法 参 考 kinto.readthedocs.io

关 于 后 端 的 思 考
如 果 我 只 是 写 一 个 todo mvc 应 用 , 为 何 我 需 要 构 建 一 个 后 端 呢 , 我 要 的 仅 仁 是 帝 有 用 尸 身 份 的 存 储 功 能 , 娄
据 模 型 也 很 标 准 , 无 非 是 有 一 个 todo list, 这 个 集 合 里 是 一 堆 item, 每 个 item 用 json 存 储
增 删 改 的 逻 辑 完 全 在 web app 或 是 mobile app 里 实 现 , 后 端 仅 仅 是 为 了 永 久 化 和 同 步 设 备 间 的 数 据 , 这 个 需
求 看 去 如 此 常 见 , 数 据 如 此 规 则 , 为 何 不 抽 象 出 一 个 通 用 的 后 端
当 然 早 就 有 人 帮 你 做 好 啦 , 这 类 的 东 西 叫 做 BaaS
对 前 端 的 意 义
我 将 手 机 端 和 web 前 端 都 视 为 client, 广 义 上 的 前 端

BaaSih 口 [ 谚 开 岑 者 一 日 孰 丁 议 些 AP|“ 就 史 以 抽 奂 坤 仰 用 后 谚 、 而 不 仁 求 助 干 后 谚 开 虎 者 提 供 搞 门 , 如 心 一
03:25
不 安 全 一 wwj718.github.io
a 目字 @ 1 外
对 削 端 的 意 义
我 将 手 机 端 和 web 前 端 都 视 为 client, 广 义 上 的 前 端
BaaS 让 前 端 开 发 者 一 旦 熟 悉 这 些 APlI, 就 可 以 抽 象 地 使 用 后 端 , 而 不 必 求 助 于 后 端 开 发 者 提 供 接 口 , 如 此 一
来 , 大 多 的 500 就 不 会 发 生 啦 , 前 端 开 发 者 可 以 独 立 完 成 整 个 应 用 了 !
同 时 你 还 获 得 了 横 向 拓 展 的 能 力 , 由 于 使 用 的 基 本 是 k-v 存 储 , 十 分 易 于 拓 展 , 不 必 担 心 应 用 的 负 载 能 力 。 而
我 们 知 道 , 后 端 新 手 提 供 的 接 口 , 抗 压 能 力 往 往 很 弱 的
那 么 代 价 呢 , 代 价 是 BaaS 给 你 提 供 抽 象 的 后 端 的 时 候 , 让 你 对 它 产 生 了 依 赖 , 好 比 之 前 parse 被 收 购 不 么 ,
服 务 就 喊 停 了 。 身 家 性 命 系 于 他 人 , 好 消 息 是 BaaS 已 经 有 不 少 开 源 实 现 了 。
对 后 端 的 的 意 义
如 果 你 发 现 你 写 的 接 口 多 是 是 标 准 的 RESTfuI 风 格 , 功 能 上 以 存 储 为 中 心 , 诸 如 我 最 近 在 做 的 拓 展 对 象 属
性 , 加 用 尸 添 加 profile/ 头 像 之 类 的 , 业 务 逻 辑 清 爽 简 单 , 那 么 你 也 许 可 以 考 虑 不 必 目 己 与 整 个 后 端 , 直 接 使
用 BaaS 就 好 了
less code , less bug
kinto 的 使 用 笔 记
安 装
pIp
Bash
pip LnstaLt kinto
Kinto iLnit
kinto migrate
[ 木 王

03:25
不 安 全 一 wwj718.github.io
a 目字 @ 1 外
kinto 甘 体 用 毛 1
r 不
安 装
plp
Bash

1 “ pip instaLL kinto

2 “Kinto Lnit

3 “Kinto migrate

4 “_Kinto start

5 “ 水 kKznto –inz /etc/kinto/kznto.,Inz start 江 配 医
参 考 Install Kinto
Running in production
Running In production
最 佳 实 践 可 以 参 考 Deployment good practices
docker
。 Sudo docker run -d -p 8888:8888 kKInto/kinto-server
0 之后妄L聿′i义叉甬云苴〔1OCke「_Cor〕吖荠〕〔)Se分离出娄盘乙子居库
。 访 问 : http://10.10.100.115:8888/v1/ ( 公 司 内 网 )
。 dockerfile
。 真 实 的 命 令 : kinto -ini /etc/kinto/kinto.ini migrate && kinto -ini /etc/kinto/kinto.ini start / 可 以
将 /etc/kinto/kintoini 用 -v 映 射 出 去

入 | ] 教 程 offline-first application 只 有 在 线 时 才 连 接 , 平 时 使 用 js 的 本 地 存 储 功 能


03:25 ` E 丨 ,
e e a 目字 @ 纷
乱不安′主 一 wWwj718.github.io |

入 | ] 教 程 offline-first application 只 有 在 线 时 才 连 接 , 平 时 使 用 js 的 本 地 存 储 功 能

push notifications
How to setup push notifications using WebSockets?
使 用 Pusher 来 实 时 推 送 消 息 ,Pusher 采 用 了 websocket 来 建 立 长 连 接
, 当 然 我 们 也 可 以 搭 建 Pusher 的 私 有 服 务 :slanger
docker 指 建
sudo docker run -d -p 8080:8080 -p 4567:4567 -it ~ink redis:redis dsninjas/slanger slanger -app_Key
765ec374ae0a69f4ce44 -secret your-pusher-secret -r “redis://redis:6379/0“
推 送 信 恳 ( 基 于 python)
Python
Lmport puSsher
pusher_client = pusher.Pusher(
app_id=「1234561,
key=「765ec374ae8a69f4ce44 0,
Secret=「your-pusher-Secret ,
SSL=False, port=4567,host=“push_ctient.tunneL.qydev,com“「
)
pusher_cLient。,trigger( “test_channeL“「, “my_event“,《“mesSage“: “ 你 好 “ 了 )

/usr/1oca1/ 1ib/python2.7/dqist-packages/pusher/http.py 执 298 收 为 292

浏 览 器 的 代 码 为
JavaScript
<1D0CTYPE htmt>

Pusher Test 八 03:25 才 沥 沥 技 水 口 才 口 口 一 不 安 全 一 wwj718.github.io a 目字 @ 1 外 浏 览 器 的 代 码 为 JavaScript <1D0CTYPE htmt> Pusher Test 更 多 细 节 参 考 pusher 的 文 村 , 需 要 注 意 的 是 需 要 萧 换 Host App-examples s kinto-attachment: 文 件 存 储 s kinto-admin: 是 一 个 前 端 界 面 , 可 以 对 接 任 何 kinto 后 端 , 用 户 凭 证 是 安 全 的 , 需 要 https, 无 法 使 用 http 的 server 可 以 直 接 把 官 方 服 务 保 存 到 本 地 即 可 用 http s kinto-telegram-wall: 消 息 墙 , 这 是 用 es6 写 的 一 个 项 目 (chrome 运 行 正 常 , 用 到 了 Fetch 替 代 ajax) permlsslons 八 03:25 心 余 扎 a 山 字 @ 1 不 安 全 一 wwj718.github.io App-examples 。 kinto-attachment: 文 件 存 储

。 kinto-admin: 是 一 个 前 端 界 面 , 可 以 对 接 任 何 kinto 后 端 , 用 户 凭 证 是 安 全 的 , 需 要 https, 无 法 使 用 http 的
server 可 以 直 接 把 官 方 服 务 保 存 到 本 地 即 可 用 http

。 kinto-telegram-wall: 消 息 墙 , 这 是 用 es6 写 的 一 个 项 目 (chrome 运 行 正 常 , 用 到 了 Fetch 替 代 ajax)
permlsslonis

Step by step permissions API tutorial
Custom authentication

kinto 是 认 证 后 端 可 插 拔 的
authentication-github

拓 展 功 能
How to write a Kinto plugin: 增 加 搜 索 功 能

其 他 的 BaaS
s firebase
o 新 版 Firebase 来 了 ! Google 要 为 App 开 发 者 打 造 一 套 万 用 云 端 后 台
s parse
o Parse-Server
o_docs

03:25 国 国 颂 颊 命 颂 吴 see
a 目字 @ 1 外
g sntudisuwis

共 他 的 BaaS
e firebase
e PafSe
o Parse-Server
o docs
o Parse Server + Express
o Basic options
o docker-parse-server-git-deploy
o docker-parse-server: 使 用 docker-compose, 更 新 活 跃
o 直 接 部 署 到 aws 上 比 较 简 单
上 述 两 者 都 带 有 各 个 平 台 的 SDK, 相 较 kinto, 功 能 完
我 的 建 议
开 发 时 候 , 使 用 云 服 务 , 选 择 不 封 锁 数 据 的 云 平 台 ( 保 障 便 捷 的 同 时 确 保 可 以 掌 握 自 己 的 数 据 ) , 如 果 有 自
行 部 署 的 需 求 , 不 妨 等 产 品 形 态 定 型 后 再 迁 移
文 章 作 者 : 种 瓜
上 次 更 新 : 31 May 2016
fools
《 django-cas 可 能 引 起 的 安 全 漏 洞 Ruby/Nodejs 解 释 器 版 本 依 赖 笔 记 >

Backlinks