HTTP API 設計入坑指南(一)

1、請求方式

1. 請求方式有get/post/put/delete/options

2. get和post的區別:

  • get一般用做獲取數據,post一般用做提交數據
  • get參數有長度限制,受限於URL長度(http協議對url長度不限制,而是服務器和瀏覽器的配置參數限制),post無限制
  • get冪等,post不冪等(冪等:屢次請求,結果同樣)
  • header裏有個參數content-length,記錄傳輸body長度,服務器根據此值判斷文件大小,若是實際大小<content-length,服務器一直等,直到超時

2、響應狀態碼

參考文獻:http://tool.oschina.net/commo...javascript

2**:以2開頭都表示成功

200  OK    成功
   201  Created   新建/修改數據成功
   202  Accepted  請求已進入後臺排隊,(異步任務)但任務並不表明已經執行成功
   204  No content  刪除成功
   206  Partial content  斷點續傳,eg:迅雷100M文件下載,網速10M/s,分段下載1-10,11-20…,已下到15節點,突遇斷電,下次下載從11開始

3**:重定向問題

4**:客戶端

400  Invalid request  請求錯誤
   401  Unauthorized     沒有權限
   403  Forbidden         禁止
   404  Not found          不存在
   405  Method not allowed 不支持請求方法
   422  Unprocesable entity  驗證錯誤

5**:服務器

500 Internal server error  服務器錯誤

3、跨域

1. JSONP 跨域讀取數據

參考文獻:<https://blog.csdn.net/u011897301/article/details/52679486>

ajax受同源策略(協議、端口、域名都相同)影響,不容許跨域請求,但script的src屬性能夠訪問跨域的JS腳本,jsonp使其不返回json數據,而返回「調用某函數的js代碼」,從而實現跨域。

eg: 在www.ren.com中php

<script type="text/javascript" src="http://www.cong.com/test.js"></script>

在test.js中 getData({"name」:」小小聰」}) 。 getData是www.ren.com中的一個函數html

jsonp不支持post請求,由於script不支持post

JQuery提供方便使用jsonp的方式

<script type="text/javascript">
    $(document).ready(function(){
        $.ajax({
            type : "get",
            async: false,
            url : "http://www.cong.com/ren.php",
            dataType: "jsonp",
            jsonp:"callback", //請求php的參數名
            jsonpCallback: "getData",//要執行的回調函數
            success : function(data) {
                alert("name:" + data.name);
            }
        });
    });
</script>

在ren.php中寫java

$data = array('name' => '小小聰');
$callback = $_GET['callback'];
echo $callback."(".json_encode($data).")";
return;

2. CROS 跨域 支持get,post等全部類型的請求

  • JSONP主要被老的瀏覽器支持,而絕大多數現代瀏覽器都已經支持了CORS
  • CROS主要經過Header支持的ajax

    Access-Control-Allow-Origin:限制域名(不建議設爲*,防止XSS攻擊)  
         Access-Control-Expose-Headers :容許訪問的服務器白名單

4、響應之JSON數據類型

不一樣語言數據類型解析規則不一致,致使不一樣語言之間部分數據類型沒法解析
eg:
    部分語言沒有null類型,GO、Lua使用nil表示
    部分語言布爾值沒有0,1概念
    數組類型大小不一致、類型最大值不同

PHP注意:
    數組轉json對象爲{「key」:「value」},若是數組爲空[],轉json則爲[]。
    對於API,字段類型應當是固定的,數組和對象的轉換,某些語言沒法處理,object爲空時,使用 new stdClass() 空對象代替,而非空數組[ ]
Python注意:
    打包json時,對unicode字符轉換後會在字符串前添加 u 前綴
    注意生成json任何狀況下都不改出現單引號,必須是雙引號

clipboard.png

clipboard.png

一切皆字符串json

受權、安所有分在下篇文章跨域

記得關注我呦
圖片描述數組

相關文章
相關標籤/搜索