HTML/CSS

API 设计的两个误区:RESTful 和 GraphQL 都不是银弹

前两天团队讨论新业务的技术方案,后端同学提议用 GraphQL,理由是"前端可以自己控制数据结构,不用频繁改接口"。我问了一句:"你们后端有多少人?"答:"3个人"。我说:"那别折腾了,RESTful 就够了"。

这不是第一次遇到这种情况。这些年做全栈,从后端写 API 到前端调 API 再到 BFF 层设计 API,见过太多技术选型上的执念。最常见的两个误区:一是觉得 RESTful 就是正统,必须符合所有规范;二是觉得 GraphQL 能解决前后端协作的所有问题。

事实上,这两个都不是银弹。

 

RESTful 的形式主义陷阱

 

大部分开发者第一次接触 API 设计,学的都是 RESTful 规范。GET 查询、POST 创建、PUT 更新、DELETE 删除,资源路径用名词不用动词,状态码要严格遵循 HTTP 标准。这些原则没错,但问题在于,很多人把它当成了教条。

一个前端老兵眼中的AI时代

在金融科技公司做了很多年前端,经历过几轮技术变革。从移动端崛起、SPA框架盛行,到微前端、Serverless,每次都有人说"前端要变天了"。现在轮到AI了,焦虑又开始蔓延。

但我的观察是:大部分前端开发者高估了AI的威胁,低估了自己的价值。

 

这次真的不一样吗?

 

先说个场景。我们在做理财产品详情页改版时,产品经理提了个需求:"能不能感知用户的疑虑,在适当的时候主动给出回答?"

听起来很AI,对吧?但落地时发现,金融产品的风险提示有严格的合规要求:哪些话能说、哪些不能说、如何表述、字号大小、颜色对比度,全部有监管规定。AI生成的回答可能很流畅,但不能直接上线,必须经过合规审核、法务确认、AB测试验证。

最后怎么做的?我们用AI做语义理解和意图识别,但回答内容是预设的合规话术库,前端负责整个交互流程、异常处理、埋点监控、合规展示。这个需求,AI解决了一部分问题,但核心的业务理解、风险控制、用户体验,还是要靠人。

AI时代和以往技术变革最大的不同:它不是替代某个技术栈,而是改变了生产方式。

测试金字塔已死,测试策略永生

博客分类: 

当我们谈论软件测试时,"测试金字塔"几乎是每个工程师都能脱口而出的概念:底层大量单元测试,中层适量集成测试,顶层少量端到端测试。这个由 Mike Cohn 在 2009 年提出的模型,影响了整整一代软件工程师的测试思维。

但在 2026 年的今天,当我们面对微服务架构、Serverless 计算、AI 辅助开发、实时协作系统时,这座金字塔开始显得摇摇欲坠。问题不在于金字塔本身错了,而在于我们把它当成了教条,而非工具。

 

金字塔的原罪:它假设了一个不存在的世界

 

测试金字塔的核心假设是:测试成本随着测试范围增大而指数级上升。在 2009 年的环境下,这个假设完全成立:

- 单元测试:毫秒级执行,几乎零成本
- 集成测试:需要启动数据库、消息队列,秒级执行
- 端到端测试:需要完整环境,分钟级执行,维护成本高

但今天的技术栈已经彻底改变了这个成本曲线:

 

1. 容器化让环境成本趋近于零

 

三星手机使用type="file"上传文件的问题

博客分类: 

使用HTML5进行手机应用开发时,遇到上传文件使用:
 <input type="file" name="file" />

这个file类型在IOS以及Android一般手机里都没有问题,唯独在三星的系列手机内有问题。问题描述如下:
点击上传按钮->选择图片,结果整个表单页面重新刷新,导致表单内的所有填写的内容丢失,包括选择文件项本身。

 

一开始以为是三星不支持type="file",但是后来觉得没道理。连难搞定的IOS都能支持了,并且本身Android是支持的,三星不至于不支持。

后来才发现需要在标签内加入 accpet="image/*" 属性。

Chrome Notifications

博客分类: 

web QQ,比价插件等都可以在浏览器里弹出一个消息框。其实实现起来还挺简单,主要用到window.webkitNotifications

进入主题,

第一步需要检查浏览器是否开启了显示消息的权限。

// check permission

window.webkitNotifications.checkPermission();

如果没有权限,请求权限:

// request permission if 

window.webkitNotifications.requestPermission(function(){

  /*if (callback) {  

    callback(this.checkPermission());  

  }*/

});  

接着就能创建消息啦,通过show方法显示:

// create notification.

排版引擎和JS引擎

排版引擎(Layout Engine)

主要是是用来让网页里浏览器绘制网页。目前流行的排版引擎如下:

WebKit 

  - Apple Safari

  - Google Chrome

Trident

  - Internet Explorer

Gecko

  - Firefox

 

JS引擎(JS Engine)

顾名思义,JS engine是专门用来处理JS脚本的程序。

主流的浏览器的JS engine如下:

Mozilla

  SpiderMonkey - Firefox 1.0~3.0

  Rhino - 由Mozilla基金会管理,open source,完全以java编写的。

  TraceMonkey Firefox 3.5~3.6

  JaegerMonkey  Firefox 4.0 + 

  IonMonkey Firefox 18.0+

Google

页面中实现无刷新上传文件

博客分类: 

在web中实现无刷新上传文件有几种方式:

 

1. 使用HTML5中的FormData和fileReader实现。但是这种方式受限于浏览器。如:IE只适用于IE10。

可参考:http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/

2. 使用隐藏的iframe提交。

可参考:http://confi.blog.51cto.com/5271328/1174071

 

最近,在Drupal 7里发现内容类型(content type)为image的字段都可以实现无刷新上传。所以很想知道它是怎么实现的。经过研究发现,其实Drupal7内引入了一个js lib——jquery.form.js。

使用挺简单的:

index.html 

一个不错的图片轮放flash——bcastr3.0 通用图片轮换播放器

博客分类: 

今天在网上找到一个用于图片轮放的flash,可以动态的加载图片。

bcastr3.0 通用图片轮换播放器

可以用于各种新闻系统或者blog系统

  • 可以读取xml设置播放列表,自定义xml地址
  • 可以将图片地址直接写网页中直接,不需要xml
  • 自动适应图片大小
  • 循环播放,自定义自动播放时间
  • 不限制图片数量
  • 自定义尺寸,自动适应任何比例,图片不变形
  • 自定义图片题目(可选)
  • 浏览过程中下载
  • 自定义图片连接(可选)
  • 自定界面色彩放案

3.0新增特点:

页面