V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kxxoling
V2EX  ›  Python

又被内部 API 给坑了!

  •  
  •   kxxoling ·
    kxxoling · 2015-03-09 16:05:55 +08:00 · 5335 次点击
    这是一个创建于 3536 天前的主题,其中的信息可能已经有所发展或是发生改变。

    调用后台错误的时候遇到一个 403 问题,但是由于返回头是 200,一直隐藏在了数十个 CSS、JS 文件当中!(不要问我为什么说又……

    API 提供正确的 HTTP 头不是基本要求吗?

    25 条回复    2015-03-09 20:36:41 +08:00
    kslr
        1
    kslr  
       2015-03-09 16:10:38 +08:00 via Android   ❤️ 1
    restful api, http api
    learnshare
        2
    learnshare  
       2015-03-09 16:29:17 +08:00   ❤️ 2
    写 API 的兴许状态码都不懂,就知道 200
    airyland
        3
    airyland  
       2015-03-09 16:34:40 +08:00   ❤️ 1
    顺便吐槽一下,很多统计服务或者广告联盟的MIME Type都是不正确的。吐槽已久,问能不能改一下,回:腾讯它们不也是这样返回的?
    halfcrazy
        4
    halfcrazy  
       2015-03-09 16:35:54 +08:00   ❤️ 1
    记得好像可以API始终返回200,然后把真正的状态码放到返回值里面
    scys
        5
    scys  
       2015-03-09 17:16:49 +08:00   ❤️ 1
    @learnshare 我一般写API都是默认返回200,如果是系统错误,就返回50x,如果没有API就返回40x
    业务逻辑 返回值 和HTTP ERROR CODE没有直接关系
    otakustay
        6
    otakustay  
       2015-03-09 17:26:53 +08:00   ❤️ 1
    你见过非200响应要扣KPI的公司吗,反正我是见过
    pi1ot
        7
    pi1ot  
       2015-03-09 17:29:03 +08:00   ❤️ 1
    之前听前端工程师说有些浏览器在非200返回时拿不到AJAX调用的response
    awanabe
        8
    awanabe  
       2015-03-09 17:29:43 +08:00   ❤️ 1
    API的HTTP头表明的是api是否可用, 不代表执行正确.
    blacktulip
        9
    blacktulip  
       2015-03-09 17:30:56 +08:00
    「调用后台错误的时候遇到一个 403 问题,但是由于返回头是 200,一直隐藏在了数十个 CSS、JS 文件当中!(不要问我为什么说又……」
    楼主你前面没有说又
    blacktulip
        10
    blacktulip  
       2015-03-09 17:34:01 +08:00   ❤️ 1
    好吧找到了,又在题目里。楼主应该写个小 helper ,出问题就把 response 过一次,不要用眼睛去找
    kernel1983
        11
    kernel1983  
       2015-03-09 17:34:46 +08:00   ❤️ 1
    论全桟的重要性
    tabris17
        12
    tabris17  
       2015-03-09 17:37:30 +08:00   ❤️ 1
    @scys 调用参数错误返回4XX没问题
    zhicheng
        13
    zhicheng  
       2015-03-09 17:45:11 +08:00   ❤️ 1
    那些不遵守 HTTP 规范的,有考虑过写 Client 的人的感受吗?HTTP 的状态码就是给 HTTP 之上的业务使用的,要不然根本就不需要设计这个东西。
    learnshare
        14
    learnshare  
       2015-03-09 17:45:31 +08:00
    HTTP 状态码有它的具体含义,代表特定状态,跟语言、数据库、前后端没关系,更跟 KPI 没关系。
    Viztor
        15
    Viztor  
       2015-03-09 17:46:47 +08:00
    Some environments (like in-browser Javascript or Flash) block or divert responses with a non-200 HTTP status code. Setting this parameter will force the HTTP status code to always be 200. The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and headers.

    --Wordpress API Docs
    jarlyyn
        16
    jarlyyn  
       2015-03-09 17:49:07 +08:00   ❤️ 1
    为什么api请求会返回403......
    既然你有了相应的返回值,那么不就是正确响应,应该是200么?
    就算返回403,难道你不去分析返回的body了么?
    155
        17
    155  
       2015-03-09 17:49:17 +08:00   ❤️ 2
    部分ISP会劫持非200请求, 剩下的连200都劫.
    dongin
        18
    dongin  
       2015-03-09 17:50:10 +08:00   ❤️ 1
    有一种坑叫我以为
    jarlyyn
        19
    jarlyyn  
       2015-03-09 17:56:07 +08:00
    200,301,500这种 状态是http链接本身的状态,应该是记录在服务器日志里,给运维看的。由客户端自动处理的,和缓存状态有关。是容器的状态。

    业务的逻辑是返回的数据,我觉得并在一起才不符合我的审美。
    sophymax
        20
    sophymax  
       2015-03-09 17:59:30 +08:00   ❤️ 1
    自己的接口为了减少被人乱分析的概率 , 成功的不成功的全部返回404 , 要是在公司这么干不知道领导会不会让我收拾东西走人
    learnshare
        21
    learnshare  
       2015-03-09 17:59:42 +08:00
    zhicheng
        22
    zhicheng  
       2015-03-09 18:02:47 +08:00   ❤️ 3
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    10.1 Informational 1xx
    10.2 Successful 2xx
    10.3 Redirection 3xx
    10.4 Client Error 4xx
    10.5 Server Error 5xx

    本来想说点儿啥的,想想还是不说了,自己看吧。
    iyaozhen
        23
    iyaozhen  
       2015-03-09 18:04:56 +08:00   ❤️ 1
    我感觉api的HTTP CODE直接交给路由本身来处理更加合适吧,通了就是200,服务器错误就是5XX。
    业务返回码自己在返回值里面定义。
    kxxoling
        24
    kxxoling  
    OP
       2015-03-09 20:33:12 +08:00
    @jarlyyn 虽然没找到原因,但是调试后台程序的时候发现问题出在 token 校验失败,如果我没理解错的话就应该返回 403.
    @iyaozhen 5xx 是正常的。
    @155 这种情况我没考虑到。。。
    tczzjin
        25
    tczzjin  
       2015-03-09 20:36:41 +08:00   ❤️ 1
    如果是wap页面又返回非200状态码的话,移动电信会劫持这个返回,之后再也不调用这个接口了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5752 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.