Archive of

客户端 POST 错误,服务端应该回 200 还是 400?

刚好今天和一个同事在这个问题上意见不一。

于是翻到了知乎上的这个问题,遗憾的是下面的答案都很水,没有一个深得我心。这很有可能证明我的看法是片面的,管它呢。但它激起了我的表达欲望,我于是键盘侠了下面这一篇。刚好傻子知乎嫌弃我没有认证国内手机号,不让我发表。那我就给自己的 Blog 添块砖吧。

其实这个标题蛮误导人。Post 错误....这种表述再宽泛了。因此有人支持有人反对都不奇怪。多么 Bad 的 Request 算Post错误?每个人有每个人的出发点,这太难达成一致了。

我的观点缩成一句话,只要请求使用 Api 协议(参数个数类型都)正确,我接受甚至有点喜欢响应 200 OK 再给出具体的 ErrorCode 和 ErrorMessage 这种做法。 既然请求能抵达你的 Action 处理方法,至少说明发起请求的一方是有一点点诚意的。如果你再有一点点时间,即使请求不是十全十美,给个不等于0的ErrorCode和一个合理的ErrorMessage是一种绅士的做法。

如果请求格式合法,服务器能够理解,但不能给出满意的结果,或者说 errorCode 不是0的情况,我个人的实践的是返回 200,并给出具体的错误码和错误信息。理由是这个请求不是无效的和非法的,直接扔400 是给前端增加工作量。

即使现在在的框架已经内置了 NotFound() 之类的快捷响应办法, 但只要Route正确到达了我的处理方法,而我又不想偷懒,我的观点也是应尽量给出人类能够理解的出错信息。你总不能因为商品暂时缺货就直接甩404吧!

我不赞成甚至讨厌那些把2xx - 5xx那几十个code 一个个或合理或牵强附会的对号入座,毕竟发明大部分这些Code 的时候还根本没有 Restful 概念。它们都过于宽泛了,是给喜欢偷懒和甩锅的程序员们准备的。即使你使用的前端框架能够自动帮你处理这些code,广泛而大量的使用这些code也只会降低用户的体验而不是改善用户的体验。因为最终用户大部分时候都只能知道错了,但不知道错在哪里。

当然是很个人的看法,欢迎任意批判。

Watched “The Shawshank Redemption” (1994)

I watched the English version of this famous movie this evening with Eric. It's so impressive. We should watch more good films in our remain life.

微生物的力量

微生物的力量

它们不知世上有人,却能够深深改变人类世界。

Install Shadowsocks-libev on Debian 8 (Jessie)

The Vps is too old to get a newer OS from the provider.

  1. create /etc/apt/sources.list.d/jessie-backports.list, and fill in the following lines
deb http://archive.debian.org/debian jessie-backports main
deb http://archive.debian.org/debian jessie-backports-sloppy main
  1. apt-get update -o Acquire::Check-Valid-Until=false
  2. apt-get install shadowsocks-libev

the -o Acquire::Check-Valid-Until=false is the key information. Hope it is helpful.

source

what I learnt 29-03-2020

1. Use axel instead of wget

$ sudo apt install axel
axel -n 1000 url

2. Using Nginx as a file server

https://www.yanxurui.cc/posts/server/2017-03-21-NGINX-as-a-file-server/

3. Using supervisor and autossh to keep a tunnel being alive all time

[program:autossh]
command=autossh -M0 -N
    -o "ExitOnForwardFailure yes"
    -o "ServerAliveInterval 15"
    -o "ServerAliveCountMax 4"
    -o "ControlPath none"
    -o "UserKnownHostsFile=/dev/null"
    -o StrictHostKeyChecking=no
    -R 18022:localhost:22
    -R 18080:localhost:80
    -R 18443:localhost:443
    user_name@user_ip_or_domain
autostart=true
autorestart=true
startretries=999
redirect_stderr=true
stdout_logfile = /var/log/supervisor/autossh.log
stdout_logfile_maxbytes = 10MB

source

4. Using shadowsocks + polipo to implement http/https proxy in Ubuntu 18.04

5. Show System Info / Hardware Details on the Command Line (Ubuntu)

  1. $ sudo apt install inxi
  2. $ inxi -F

Guide