POST {domain}/api/v1/create
- none
Request Body
Field | Type | Required | Description |
---|---|---|---|
url | string | Yes | 原始網址 |
alias | string | No | 指定短網址替代碼 |
Schema
Field | Type | Description |
---|---|---|
origin | string | 原始網址 |
tiny | string | 短網址 |
created_at | string | 短網址產生時間 |
expires_at | string | 短網址失效時間 |
sequenceDiagram
participant client
participant server
participant mysql
participant redis
autonumber 1
client ->> server: [POST] /api/v1/create
alt
Note over server: failed to parse request body
server ->> client: reponse 400: field invalid.
else
autonumber 2
Note over server: parse request body successfully
server ->> server: 產生短網址 (MurmurHash)
server ->> redis: [GET] 檢查是否存在相同的短網址<br>key: tiny:{tiny}
alt
Note over server: 短網址(key) 相同 且 [ 原始網址(value) 相同 OR 客製短網址相同 ] 時
server ->> client: response 400: alias dunplicated.
else
autonumber 4
Note over server: 短網址(key) 相同且原始網址(value) 不為空時
server ->> server: 將原始網址加上後綴改變短網址雜湊結果
end
server ->> mysql: 寫入短網址<br>table: urls
Note over server, mysql: 忽略在資料庫發生短網址碰撞的情境
server ->> redis: [SET] 寫入短網址供往後檢查使用<br>key: tiny:{tiny}, value: {origin}, expired: 1小時
server ->> client: reponse 200: OK
end