Skip to content

Latest commit

 

History

History
67 lines (49 loc) · 1.82 KB

create.md

File metadata and controls

67 lines (49 loc) · 1.82 KB

縮網址

POST {domain}/api/v1/create

Authorization

  • none

Request

Request Body

Field Type Required Description
url string Yes 原始網址
alias string No 指定短網址替代碼

Response

Schema

Field Type Description
origin string 原始網址
tiny string 短網址
created_at string 短網址產生時間
expires_at string 短網址失效時間

Flow

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