網路基礎
HTTP
一種協議(網路資料通訊的基礎),有統一的規範大家才知道該如何在網路上交換資料。另外https中的s代表secure的意思。
(待補充)
DNS Server
Domain Name System
照理來說,傳資料要寫IP位置(就像現實生活中的地址),但這樣一串數字很難記住,因此我們可以傳domain name(例如google.com ) 給 DNS Server,它再回傳IP位置給我們。就像你跟計程車司機說要去101,而不用直接背出完整的地址。
*terminal中可用$nslookup google.com
來查詢
請求方法(request methods)
在實際開發中,可能因各種原因,而失去原來定義的用途。根據HTTP 請求方法 - HTTP | MDN (mozilla.org) 目前有以下幾種:
Method(*表示較常使用) | description |
---|---|
*GET | 請求展示特定資源,只用來取得資料。 |
*POST | 提交指定資源,通常會改變伺服器狀態或副作用(side effect)。 |
*PUT | 會取代指定資源。 |
PATCH | 修改部分指定資源。 |
*DELETE | 刪除指定資源。 |
HEAD | 與GET相同,但只response head。 |
CONNECT | 會和指定資源標明的伺服器之間,建立隧道(tunnel)。 |
OPTIONS | 描述指定資源的溝通方法(communication option)。 |
TRACE | 與指定資源標明的伺服器之間,執行迴路返回測試(loop-back test)。 |
status code:
代碼開頭 | 簡略意義 |
---|---|
1** | Hold on |
2** | Here you go |
3** | Go away |
4** | You fucked up |
5** | I fucked up |
實作一個超簡易 HTTP Client / Server
client 端
先安裝這個指令
$npm install request
from : request - npm (npmjs.com)
在js檔中輸入以下程式碼
const request = require('request');
request('http://www.google.com', function (error, response, body) {
console.error('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
// console.log(response.headers)
});
server端
在node.js裡有個內建的library 叫 http
var http = require('http')
var server = http.createServer(handleRequest)
function handleRequest(req,res)
{
if (req.url==='/')//根目錄
{
res.write('welcome!')
res.end()
return
}
if (req.url==='/hello')
{
res.write('hello')
res.end()
return
}
if (req.url === '/redirect')
{
res.writeHead(302,//redirect
{
'Location':'https://google.com'
})
res.end()
return
}
}
server.listen(5000)//port
OSI 和TCP/IP
OSI 和 TCP/IP是網路分層模型,前者共有7層;後者則是4層。每一層會有相關的數據處理方式定義,例如各種協定等等。
補充內容:网络分层TCP/IP 与HTTP - 掘金 (juejin.cn)
API
Application Programming Interface
透過API可以讓雙方交換資料。
SDK : Software Development Kit
類似包裝好的API,取得後可以用不同的方法呼叫已被包入的資料。
練習串接API的網址:Reqres - A hosted REST-API ready to respond to your AJAX requests
搭配request文件可以實作其他method:request - npm (npmjs.com)
資料格式的選擇
XML : eXtensible Markup Language
JSON : JavaScript Object Notation
- 將JSON轉換為JS物件 :
JSON.parse(<.json file>)
- 將JS物件轉換為JSON:
JSON.stringify(obj)
const request = require('request');
const process = require('process')
request('https://reqres.in/api/users/2', function (error, response, body)
{
const json = JSON.parse(body)//將JSON轉換為JS物件
console.log(json.data.first_name);
});
const obj =
{
name : 'yehs',
job : 'none'
}
console.log(JSON.stringify(obj))//將JS物件轉換為JSON
交換資料方式
HTTP API
SOAP 和其他
SOAP:Simple Object Access Protocol 是一種標準化的通訊規範,建立在XML格式之上。
測試工具 The World's Most Popular API Testing Tool | SoapUI
*RESTful
不是一種協定,是一種風格(建議)。因為HTTP的method並不是硬性規定一定要用哪個。e.g.DELETE,其他像post也能達到一樣的功能,但是這樣不同工程師作業時可能會造成混淆,所以盡量照"正規格式"來使用,稱為符合RESTful風格。
除了HTTP之外當然也能夠自定義資料交換格式
好用工具及指令
curl
#等於用get方式連到google
curl https://www.google.com
#只要header
curl -I https://www.google.com也可以達到上面做的post
curl --header "Content-Type: application/json" \
--request POST \
--data '{"name":"xyz","job":"xyz"}' \
https://reqres.in/api/usersnslookup 解析IP位置
ping 測試可不可以連到該網址
telnet測試特定的port有沒有開。連到之後可以繼續輸入來拿到資料。
Telnet是一種應用層協定,使用於網際網路及區域網中,使用虛擬終端機的形式,提供雙向、以文字字串為主的命令列介面互動功能。屬於TCP/IP協定族的其中之一,是網際網路遠端登錄服務的標準協定和主要方式,常用於伺服器的遠端控制,可供使用者在本地主機執行遠端主機上的工作。