71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| syntax = "v1"
 | |
| 
 | |
| info (
 | |
| 	title:   "Short URL Gateway"
 | |
| 	desc:    "Service for generating, retrieving, and deleting short URLs"
 | |
| 	author:  "Daniel Wang"
 | |
| 	email:   "igs170911@gmail.com"
 | |
| 	version: "0.0.1"
 | |
| )
 | |
| 
 | |
| type RespOK {}
 | |
| 
 | |
| type CreateShortURLRequest {
 | |
| 	URL string `json:"url" validate:"required"`
 | |
| }
 | |
| 
 | |
| type URLRequest {
 | |
| 	ShortCode string `path:"short_code"`
 | |
| }
 | |
| 
 | |
| type Status {
 | |
| 	Code    int64       `json:"code"` // 狀態碼
 | |
| 	Message string      `json:"message"` // 訊息
 | |
| 	Data    interface{} `json:"data,omitempty"` // 可選的資料,當有返回時才出現
 | |
| 	Error   interface{} `json:"error,omitempty"` // 可選的錯誤信息
 | |
| }
 | |
| 
 | |
| type URLResponse {
 | |
| 	URL string `json:"url" validate:"required"`
 | |
| }
 | |
| 
 | |
| type URLCodeResponse {
 | |
| 	Code string `json:"short_code"`
 | |
| }
 | |
| 
 | |
| @server (
 | |
| 	group:   url
 | |
| 	prefix:  /api/v1/url
 | |
| 	schemes: https
 | |
| 	timeout: 10s
 | |
| )
 | |
| service url {
 | |
| 	/* @respdoc-400 (BaseResponse) // Invalid input parameters */
 | |
| 	/* @respdoc-500 (BaseResponse) // Server error */
 | |
| 	@doc (
 | |
| 		summary:     "Create Short URL"
 | |
| 		description: "Map a long URL to a short URL"
 | |
| 	)
 | |
| 	@handler createShortURL
 | |
| 	post / (CreateShortURLRequest) returns (URLCodeResponse)
 | |
| 
 | |
| 	/* @respdoc-400 (BaseResponse) // Invalid input parameters */
 | |
| 	/* @respdoc-500 (BaseResponse) // Server error */
 | |
| 	@doc (
 | |
| 		summary:     "Retrieve Short URL"
 | |
| 		description: "Retrieve the original URL using the short URL"
 | |
| 	)
 | |
| 	@handler getOriginalURL
 | |
| 	get /:short_code (URLRequest) returns (URLResponse)
 | |
| 
 | |
| 	/* @respdoc-400 (BaseResponse) // Invalid input parameters */
 | |
| 	/* @respdoc-500 (BaseResponse) // Server error */
 | |
| 	@doc (
 | |
| 		summary:     "Delete Short URL"
 | |
| 		description: "Delete a short URL mapping"
 | |
| 	)
 | |
| 	@handler deleteShortURL
 | |
| 	delete /:short_code (URLRequest) returns (RespOK)
 | |
| }
 | |
| 
 |