「产品前端架构」接口设计

接口设计

api_design_overview.png

用户使用 Web 客户端访问 Web 系统,系统在收到请求后执行操作
(收集数据模型,选择数据经行组装),将结果返回给客户。

其中包括的元素和关系如下图所示:

api_elements.png
  • Template,分离数据模型的页面结构,根据不同的数据模型展现不同的信息
  • URL,页面访问地址、页面标示
  • API,用于载入异步请求的接口
  • Model,数据模型,页面模板组装模型和异步请求返回的数据模型

约定

api_rule.png
  1. URL 与页面模板间的映射,和异步载入内容对应的接口
  2. 视图模板和数据模型的对应(数据模型的格式和类型)
  3. 异步接口输入输出信息的约定
api_rule_detail.png
  1. 页面入口规范,定义系统对外可访问入口和配置信息(URL、模板、接口)
  2. 同步数据规范,定义系统对模板文件的预填信息(模板、数据模型)
  3. 异步接口规范,定义前后端接口信息(接口、数据模型)

接口规范

每个规范也会对应若干规定若干规则约定来指导前后端工程师的具体实施。

页面入口规范

api_page_entry.png
  • 基本信息
  • 输入参数
  • 模板列表
  • 接口列表(异步载入数据接口)

页面入口规范(范例)

条目 详情
访问地址 /dj/{id}
页面描述 节目详情及推荐信息
输入参数 名称:ID;类型:Number;描述:节目标示
异常跳转 异常:500;跳转地址:/500/
模板列表 默认:/template/dj/dj.ftl
过期:/template/dj/over.ftl
未找到:/template/dj/404.ftl
接口列表 歌曲列表:/api/dj/tracks/{id}/
相关节目:/api/dj/rec/{id}/
收藏节目:/api/dj/fav/{id}/
评论节目:/api/comments/{id}
  • 页面基本信息,描述页面的主要功能
  • 输入参数为访问地址时支持的参数说明
  • 异常跳转,为系统全局异常处理
  • 模板列表,列举当前页面的相关模板,包括异常(如下图)
  • 页面需要的所有异步接口列表
template_normal_error.jpg

同步数据规范

api_data_sync.png
  • 基本信息
  • 预填数据
  • 注入接口

同步数据规范(范例)

条目 详情
模板文件 /templates/dj/dj.ftl
模板描述 节目详情及推荐信息模板文件
预填信息 {"名称":"user", "类型":"User","描述":"登陆用户信息"}
{"名称":"dj", "类型":"Program","描述":"节目信息"}
{"名称":"other", "类型":"String","描述":"其他信息"}
注入接口 jd.parser
{"输入":[["String", "节目信息"], ["Boolean", "是否格式化"]]}
{"输出":["Program", "节目对象"]}
dj.api
dj.api2
  • 模板的基本信息
  • 预填数据包括全局和页面数据及其类型
  • 注入的接口说明(输入输出信息),没有可以不填写

异步接口数据规范

api_async.png
  • 基本信息
  • 输入信息
  • 输出信息

异步接口规范(范例)

条目 详情
请求方式 GET POST
接口地址 api/dj/tracks/{id}/
接口描述 获取指定节目的歌曲列表
输入数据 {"名称":"id", "类型":"Number","描述":"节目标示"}
{"名称":"offset", "类型":"Number","描述":"节目起始位置"}
{"名称":"limit", "类型":"Number","描述":"列表数量"}
输出结果 {"名称":" code", "类型":"Number","描述":"请求结果标示"}
{"名称":"message", "类型":"String","描述":"请求异常信息"}
{"名称":"result", "类型":"Array","描述":"歌曲列表"}
  • 接口基本信息,地址不带查询参数
  • 输入数据,REST,查询数据(必须包含名称类型及描述)
  • 输出结果,通用部分及结果集(复杂的信息需展开说明)

规范的应用

通过模拟数据的形成,将前端本地开发与后端独立出来,
这样前端工程师就可以独立的进行本地的开发工作。

api-rule-apply.jpg

使用页面入口规范制定项目结构(配置信息,目录结构和模板结构),
此过程可以使用自动化工具自动完成。

api-rule-apply-1.jpg

根据同步数据规范可生成模拟数据的配置文件。(此部分通用可以使用自动化工具来完成)

api-apply-2.jpg

根据异步接口规范生成模拟异步数据。

本地开发

local-development.jpg

前端开发环境包含两个部分,本地模拟服务器本地代理

  1. 客户端发送的请求,会被本地模拟服务器拦截并返回相应的模拟数据
  2. 客户端发送的异步请求,会被本地代理拦截并返回对应的模拟数据

Local Server

local-server-working.jpg

根据请求规则进行匹配,然后生成(整合模板和模拟数据)所请求的页面

Local Proxy

local-proxy-working.jpg

拦截异步请求后,根据请求的匹配规则返回所请求的数据(例如 JSON 或 XML)。

联调

local-and-remote.png

前后端联调需要去除本地环境,在实际开发中只需要对配置文件进行调整既可
(控制哪些请求需要被本地服务器或代理拦截,哪些需要使用远程服务器)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 走过,才明白 卞晨蕊 新年,去了趟黄山。 那次之前,在我们眼中,黄山一直是迷雾弥漫,虚虚渺渺,神秘得很。而真正走过...
    简约语文阅读 224评论 0 1
  • 自古豪杰生傲骨, 从来孬熊畏猛虎; 今生持剑寻梦去, 放马天山待春来。
    玉芷紫枫阅读 251评论 0 3
  • 每一滴浪花的扬起 跌落大海 是回归的使命 车轮紧紧依偎铁轨 远方慢慢收紧 放出的射线 一点靠着另一点 就像所有的故...
    禾叶兄弟阅读 225评论 4 0
  • 今天是假期最后一天,端午节。 端午节的由来长期以来众说纷纭,争论不休。我们上学时学到的端午节吃粽子赛龙...
    刘一鸣妈妈阅读 229评论 0 3