su-its / ams-backend

:briefcase: (This repository is no longer maintained) The backend server of our Access-management-system.
MIT License
0 stars 0 forks source link

バージョンを取得するAPIを実装 #89

Closed equal-l2 closed 3 years ago

h-takeyeah commented 3 years ago

自分がバックエンドのバージョンとAPIのバージョンは同期してないとまずいと思い込んでいたので今まで言わなかったのですが,同期してなくていいなら/から返すJSONに1つプロパティを生やせば十分ではないかと思います.

/から現在返している

{"message":"This is backend server."}

というJSONにversionを追加して

{
  "message":"This is backend server.",
  "version": "2.0.1"
}

に変えるということです.いいところとすると,ファイルが増えない,DBにアクセスしないcontrollerやrouterが必要なくなる,です.(それに関連して)また,バージョンはリソースではないですから他のルーターと同列に並んでいるのは少し不自然な感じがします.これも/から返すJSONに1つプロパティを生やせば十分ではないかと思う理由の一つです.

これも言っていなかったので申し訳なかったのですが,APIサーバーの/はサーバー自身のメタ情報を返してくれると嬉しいと思っていました.個人的には/にアクセスしてバージョン情報が返ってくるのは自然な挙動です.

ただし客観的に見て,もしも/にアクセスして返ってくるversionという情報がAPIのそれに見えてしまうようであれば混乱のもとなのでこの主張は取り下げます(書いていてちょっとそんな気もしてきてしまった).

equal-l2 commented 3 years ago

その形自体は綺麗だと思うんですが、現状だとそれはちょっと難しいです。 なぜかというと、フロントエンドのプロクシは/v1/がベースパスになっているので、バックエンドの/にはアクセスできないためです。

ただ、バージョンだけのためにエンドポイントが生えてるのも変と言えば変な気はしますね…… 将来的な拡張を考えてサーバの情報のオブジェクトを返すようなエンドポイント(infoとか)を生やした方がいいのかな……

h-takeyeah commented 3 years ago

あ…プロクシ忘れてました.ではこのPRの通りでいいです

h-takeyeah commented 3 years ago

infoありですね

h-takeyeah commented 3 years ago

バックエンド側で/v1にexactly matchedしたリクエストが来た時に/にリダイレクトするようにしておき,フロントエンドでメタ情報がほしい時はaxios.get('/')とすれば/にまとめる作戦もできるのではないかということを思いつきました.ゴリ押しですけど

equal-l2 commented 3 years ago

どちらにするかはデザインの問題なので、そちらで決定してくれればそれに従います。

h-takeyeah commented 3 years ago

@equal-l2

/から返すJSONに1つプロパティを生やせば十分ではないかと思います.

を実現したいです.

バックエンドの方を

// 現在の/の挙動を変えたくない場合は気持ち悪いかもしれないが正規表現を使って/と/v1で同じのを返すようにすればよい app.get(/\/|\/v1/, (_req, res) => {


このように改修した上で,フロントエンドがバックエンドの`/^\/v1$/`にアクセスしてくれれば上記のJSONが返ります.

このやり方についてご意見があればお願いします.

一旦これで手元で実装してみます
equal-l2 commented 3 years ago

続きは #90 で。