---
# System prepended metadata

title: '[基礎系列]聽說你寫過聊天機器人?你真的知道WebHook,RESTful API?'
tags: [Web]

---

---
tags: GDSC
---

# [基礎系列]聽說你寫過聊天機器人?你真的知道WebHook,RESTful API?

---

## Webhook Introduction

![](https://i.imgur.com/v3Yoewh.png)

----

### 想像一下假設你現在的Server想要做即時更新

> 但你只會寫一般Restful API被動的去接收請求，但無法主動的更新所有Client.

Webhook 就是在解決這類的問題，達到Server能夠主動推撥到另一個Client
因這一特性Webhook也稱作反向API


---

## RESTful API

> 你可能會寫API，但你有照RESTful 的風格進行API開發嗎?，往下來看看這些特點你是否有做到。

![](https://i.imgur.com/XZLYPCp.png)


----

### HTTP Verbs

> 我們知道製作API除了要設置路由之外，請求方法也是一個要點，所謂的請求方法也就是標題所說的HTTP Verbs
> 
- POST: 新增資源，也可以做一些特殊要求 C->Create
- GET: 取得資源-> Read 
- PUT: 更新資源 -> Update
- PATCH: 更新部分資源內容 -> Update
- DELETE: 刪除資源->Delete
- HEAD:取得HTTP Header 

**其中GET，HEAD由於實際上都是讀取資源並不會去動到Server Resource**

----

### RESTful API相關規範

> 由於HTTP是無狀態的通訊協定，一件事情不應該分成兩條API組成
> 參數樣式盡量應保持一致
> HATEOAS(Hypermedia as the engine of application state) 應用程式狀態引擎超媒體

----

### URI Nouns

URI: Uniform Resource Identifier，統一資源標識符
URL: Uniform Resource Locator 統一資源定位符

> URI = [Prefix] +API Endpoint

URI設計原則
- 一般資源用複數名詞
- 唯一資源用單數名詞
- 資源層級反映在URI上
- Utility API設計合理即可
- URI建議小寫可用- _ 分隔但風格要統一

----

### HTTP Status Code

- 1XX:Information
- 2XX:Success
- 3XX:Redirect
- 4XX:Client Error
- 5XX:Server Error

---

## HTTP Header

> 在我們發出HTTP Request的時候會夾帶一些資訊他會描述在請求的Header之中
 
常見的有
- Accept 接受資源型態
- Authorization 認證資訊


---

## HTTP Body

常見格式JSON、XML