编程开发与计算机科学

Laravel 强制 api 路由组返回 JSON

Laravel 的默认错误处理器通过 Illuminate\Http\RequestexpectsJson() 方法来决定是否将错误信息渲染成 JSON 格式输出。这要求将请求头的 Accept 字段设置为 application/json。本文提供一种方法,在尽可能减少代码的情况下,强制让 api 路由组中的所有错误响应变成 JSON 格式,而不依赖于请求的 Accept 头部

使用 Cloudflare 的源站缓存控制

Cloudflare 默认不缓存 HTML 页面,必须通过添加页面规则(Page Rule)来开启网页缓存。然而,免费用户每个站点最多只能添加三条规则。对于一个复杂的项目来说,三条规则是远远不够用的。通过设置源站缓存控制(Origin Cache Control),可以仅使用一条规则来启用全站缓存。

……

    使用 Google Authenticator(谷歌身份验证器)

    某些简单的业务场景需要一个管理后台,但是系统却没有复杂到需要引入一套用户体系。那么,谷歌身份验证器(Google Authenticator)可以作为管理后台的一种简单的身份认证方式。

    Google Authenticator 是一款基于时间(TOTP)与哈希(HOTP)的一次性密码算法的两步验证软件令牌。其原理是通过密钥与时间或者计数器序列计算出一个六到八位的一次性密码。

    其中 HOTP 算法需要服务端维护一个额外的计数器,需要客户端和服务端的计数器保持同步才能验证一致。而 TOTP 算法只要保证服务端和客户端的时间同步即可验证一致(默认时间误差窗口是30秒)。

    ……

    Java 获取包中所有的类

    刚接触 Java,没想到连这种基础功能都需要自己实现,而且还如此复杂。虽然最后也完成了实现代码,不过最后还是使用了 org.reflections 第三方包。记录实现代码,万一以后用得到

    Vert.x 项目自动重新部署

    Vert.x 是一款基于 JVM 的高性能异步框架。使用官网提供的项目生成器创建的 gradle 配置有一个 BUG,导致在 Windows 环境下无法完成自动部署。 修复方法如下

    让 Vagrant 共享目录支持文件事件通知

    在使用 Vagrant 的过程中发现了一个问题:对于使用 config.vm.synced_folder 进行配置的共享文件夹,如果在 Host 系统(本地环境)中修改了其路径下的文件,在 Guest 系统(虚拟机环境)中是无法通过 inotifywait 接收到文件系统事件的。

    而通常情况下,Vagrant 的共享目录是用来存放源代码的。我们会在 Host 系统中编辑源代码,在 Guest 系统中运行它们。如果 Guest 系统无法监控源代码目录的变化,就无法实现源代码的自动编译和热加载。

    ……

    让 FastRoute 支持 URL 反向解析

    FastRoute 是一款高性能路由组件,需要运行于 PHP 7.1 及以上版本。很多 PHP Web 框架都用它作为默认路由。然而这款路由组件不支持 URL 反向解析。Hyperf 框架也采用了这款路由组件,以下代码可以让 Hyperf 支持 URL 反向解析

    Swoole 框架最佳实践

    Swoole 是一种常驻内存进程 Reactor 模式的框架。

    支持 Swoole 的 Web 框架:

    1. Laravel-Swoole
    2. Laravel-S
    3. Swoft
    4. Hyperf
    5. One
    6. EasySwoole

    1 和 2 可以让 Swoole 支持 Laravel 框架;个人更倾向于 Hyperf;Swoft 很好,但也很重,如果要使用Swoft,不如考虑换个技术栈,比如 Java 或 Python。

    ……

    CQRS/Event Sourcing 模式实践

    如果还不清楚什么是 CQRS 和 Event Sourcing 模式,可以先阅读下面的两篇文章:

    Event Sourcing 模式,即事件溯源模式。该模式使用只可追加的存储来记录对数据所进行的所有操作,而不是存储领域数据的当前状态。其中,存储 Event 记录的介质称作 Event Store

    CQRS(Command Query Responsibility Segregation),即命令和查询责任分离。该模式使用单独的接口来隔离更新数据(命令)的操和读取数据(查询)的操作。这意味着用于查询和更新的数据模型是不同的。

    ……

    Python Web 框架选型

    Python Web 框架有如下几种部署方式:

    • WSGI
    • ASGI
    • 独立部署
    • CGI/FastCGI

    WSGI是最常见的接口,由PEP333和PEP3333规范定义,获得了最广泛的支持。

    WSGI接口的上游是HTTP Server,下游是WSGI应用,而提供WSGI服务的程序被称为WSGI容器。生产环境中常见的WSGI容器有Gunicorn、uWSGI、Apache mod_wsgi等。另外,很多框架本身也提供了WSGI容器,比如:Gevent、Tornado、Twisted。其中,Gunicorn可以通过自定义worker_class搭载其他异步框架来提高性能,比如:Gevent、Tornado、Meinheld等,且容器中运行的也不一定是标准的WSGI应用,比如Gunicorn+Sanic。

    ……