jas0nhuang

[筆記] TCPIP 與 API

網路層級與 TCP/IP 模型

在 HTTP 筆記裡就有這張圖啦:
Web Layer

OSI 七層,各層級都有自已的協定。
TCP/IP 模型為四層:應用層、傳輸層、網路層、鏈結層。
HTTP 屬於應用層,TCP 屬於傳送層,IP 屬於網路層。

IP 位址

IPv4 與 IPv6
有固定 IP 與浮動 IP

理想情況:世界上的所有電腦都有一個不重覆的固定 IP(顯然不可能……)

實際狀況:每台內網的電腦都有一個虛擬(私有 private) IP 連到數據機,數據機再以一個對外的固定 IP 對外連線。

Port 連接埠

在 IP 位址後面可以接上 Port,目的是區別在同一個主機上的不同服務
預設:HTTP 80、HTTPS 443、FTP 21……

TCP 與 UDP

兩個都是傳輸層的協定,不同點在於,TCP 是可靠的連接,有所謂的三次握手。
UDP 則不必要保證可靠性,視訊通話、網路直播……等以即時性為訴求的服務,通常會建立在這個傳輸協定上。

什麼是 API

Application Programming Interface:應用程式介面
一種介面, 一個溝通的管道, 資料交換的方法
制作 USB 廠商的隨身碟!!!
提供「資料」 或接收資料, 提供 API 者可以控制什麼資料可以讓使用者存取。
透過「網路」提供的 API 就會被稱做 Web API,而通常 Web API 都是在講 HTTP API(透過 HTTP 協定提供的 API)。
Lorem Picsum 一個有趣的 API。

API 的功能

  • 對使用者:
  1. 固定選項
  2. 減少溝通障礙
  • 對提供者:
  1. 減少人力
  2. 不提供沒有的選項,沒有客製化

再用一次 request 串串

測試用 API:[Req | Res](https://reqres.in)
GET:

const request = require('request')
request(
'https://reqres.in/api/users',
function(error, response, body) {
console.log(body)
}
}
  • node 小技巧:
    讀取參數
    const process = require('process')
    console.log(process.argv)

POST:

const request = require('request')
request.post(
{
url: 'https://reqres.in/api/users',
form: {
name:'JJ',
job:'none'
}
},
function(error, response, body) {
console.log(body)
}
}

XML 與 JSON

XML 歷史悠久,通常會用 SOAP 協定傳送。(node 上面可以用 node-soap 套件來傳送)

現在大部分都用 JSON 這個資料格式了。
如果回傳的 JSON 內容被轉換為字串的話,可以用 JSON.parse() 來轉換為 JSON 資料。
也可以反轉,將 JSON 資料轉換為字串:JSON.stringify()

到底什麼是 RESTful

不是協定、標準,只是一種「風格」
查詢用 GET,新增用 POST,刪除用 DELETE,修改用 PATCH。大部分的 API 都是 RESTful 風格了,因為它比較直覺,好懂,也符合 HTTP request 的語意。

CLI 上好用的工具

curl

curl 網址 回傳整個頁面的回應
curl -i 網址 只下載 header

ping

測試是否能連線到某個伺服器

telnet

telnet {IP} {port} 可以連線到該伺服器的某個 port 上。
預設 port 為 23

nslookup

查看 DNS 查詢到的 IP