RESTful API 最佳实践
转自:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。
它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

转自:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。
它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

原始链接:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
JWT - Json Web Token:目前最流行的跨域认证解决方案,本文简单介绍它的原理和用法。
互联网服务离不开用户认证。一般流程是下面这样:
这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。
举例来说,A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现?
一种解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。
另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。
FFmpeg 由于其丰富的 codec 插件,详细的文档说明,并且与其调试复杂量大的编解码代码(是的,用 MediaCodec 实现起来十分啰嗦和繁琐)还是不如调试一行 ffmpeg 命令来的简单。
利用 FFmpeg 做视频编辑大家一般都会去参考这个 repo ,但是他的 asset 里面的 ffmpeg 大小高达 18MB,即使压缩进 APK 包里也会达到 9MB。对 APK 大小敏感的开发者肯定颇有微词。 ffmpeg-android-java 的原理很简单,交叉编译好可执行的 ffmpeg 二进制文件放到 asset 里,安装后释放二进制文件到 /data/data/ 里,用 Shell command 的形式去执行这个文件,好处是没有任何依赖(依赖全打进二进制了),稳定可靠(不需要动态加载)。 坏处就很明显了,因为是二进制文件,所以 size 会很大。
于是,果断放弃这种方式,转而编译 ffmpeg 的 so 库,动态加载然后执行命令。听起来不错,对不对?动态库的大小肯定比 ffmpeg-android-java 的 executable 要小多了,而且自己编译 ffmpeg 还能对其进行裁减。
The purpose of this article is to describe how to install CentOS 7.2.1511 or 1603 Minimal on the Raspberry PI 3 B+ for use as a starting point to install light-weight services such as DNS, NTP, DHCP, Apache, etc.
https://wiki.centos.org/SpecialInterestGroup/AltArch/Arm32/RaspberryPi3
root用户的默认密码是: centos.
从下面的网址获取镜像文件:CentOS 7 For RaspberryPI
我用的是:CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1804-sda.raw.xz
有多种方法可以把镜像文件烧录到SD卡上,最常用的:
dd命令win32diskimager具体方法可以参考:http://xmodulo.com/write-raspberry-pi-image-sd-card.html
我是在
macOS上用 Etcher 把镜像文件烧录到SD卡上的。
另外,在烧录完成后,可以直接进入挂接的文件系统下,修改cmdline.txt文件,在末尾加上ip=192.168.1.226,ip前面有个空格,这样启动后直接设定了IP地址。
启动系统后,可以在/root路径下发现有个 /root/README 文件,这个文件中描述了完成安装还需要做的步骤。
1 | [root@centos-rpi3b ~]# cat /root/README |
1 | # wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash |
or
1 | # curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash |
.bashrc中已经自动添加,在不退出当前终端的情况下用下面的命令设置环境变量:
1 | # export NVM_DIR="$HOME/.nvm" |
本文介绍了在macOS Sierra 10.12上如何用Homebrew来安装MySQL。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"注意: 提前装好
Command Line Tools for Xcode #.#。
$ brew info mysql 安装MySQL,输入命令行 : $ brew install mysql
开打终端输入
改变行数:defaults write com.apple.dock springboard-rows -int X
改变列数:defaults write com.apple.dock springboard-columns -int X
改变生效:killall Dock
其中X是大于0的整数。根据自己喜好调整即可。
1 | # 恢复默认: |
px是绝对单位。
px是pixel的缩写,也就是像素,是实际的显示设备(显示器、手机屏幕)上的一个物理像素点,它的大小和实际的显示用的物理设备有直接关系,也就是设备依赖的。
em是相对单位。
em是相对于元素自己的字体大小font-size而言的。font-size用em来表示的话,则是相对于父元素的font-size。font-size没有设置,则相对于浏览器的默认字体尺寸。任意浏览器的默认字体大小
font-size都是16px,也就是说:1em = 16px, 2px = 0.75em,10px = 0.625em。
为了简化font-size的换算,需要在css中的body选择器中声明font-size = 62.5%,这就使em单位值变为16px * 62.5%=10px, 这样12px = 1.2em, 10px = 1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。
1 | #将日志同时输出到文件和屏幕 |