Ptt-official-app / Ptt-backend

PTT APP 的後端
BSD 3-Clause "New" or "Revised" License
208 stars 67 forks source link

updated user API definitions #254

Closed joremysh closed 3 years ago

joremysh commented 3 years ago

👏 解決掉的 issue / Resolved Issues

📝 相關的 issue / Related Issues

⛏ 變更內容 / Details of Changes

PichuChen commented 3 years ago

問一下,有對應的截圖嗎?

codecov-commenter commented 3 years ago

Codecov Report

Merging #254 (550963b) into development (0371cfc) will not change coverage. The diff coverage is n/a.

Impacted file tree graph

@@             Coverage Diff              @@
##           development     #254   +/-   ##
============================================
  Coverage        45.49%   45.49%           
============================================
  Files               29       29           
  Lines             1622     1622           
============================================
  Hits               738      738           
  Misses             782      782           
  Partials           102      102           

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 0371cfc...550963b. Read the comment docs.

joremysh commented 3 years ago

image image image image

joremysh commented 3 years ago

我們公司用 go 開發的專案 response body 都會寫一個 struct 包起來,這樣可以重複使用,程式碼也比較容易閱讀。請問 @PichuChen 爲什麼 Ptt-backend 裡面很多都用 map 來寫呢?

PichuChen commented 3 years ago

我們公司用 go 開發的專案 response body 都會寫一個 struct 包起來,這樣可以重複使用,程式碼也比較容易閱讀。請問 @PichuChen 爲什麼 Ptt-backend 裡面很多都用 map 來寫呢?

其實包不包都可以,用 struct 的話那就是

type Foo struct {
    UserID string `json:user_id`
    XXX interface{} `json:xxx`
}

f := &Foo{}

data, _ := json.Marshal(&f)

這樣的感覺

然後用map的話,就是

data, _ := json.Marshal(&map[string]interface{}{
    "user_id": xxx
    "xxx": xxx
})

感覺起來就是後面比較短,然後也比較明確知道有回傳什麼這樣,不過要改成上面第一種方法也不是不行,沒有特別說為什麼要用下面這種就是了。

joremysh commented 3 years ago

目前我遇到的問題是要確認幾個 api response 的結構是不是一樣的時候,需要一個一個比對參數的 key 不太方便。

以後如果有需要修改參數的話,就會需要去找有哪些地方有用到,然後一個一個改。要增加新的 api 的時候也可能會有人不小心把 key 打錯。全部都用 interface 的話也會讓人搞不清楚應該放什麼類型。

PichuChen commented 3 years ago

了解,所以是不同的API但是回應類型一樣的時候。

這個搞不好可以開ISSUE把這些map改成一樣的回傳格式。

joremysh commented 3 years ago

有重複使用到的 string 也可以加個 constant 統一使用一樣的,例如 user_iderrorpermission_error等。

PichuChen commented 3 years ago

應該該可以先求有再求好,避免一次戰線開太多關不起來

error 的部分先前有討論過重新設計,還沒設計