要件
機能要件
以下のように動作する API エンドポイントを実装してください.すべての都道府県に対する総人口と年少人口の統計を返す API となります.
$ curl -sSL https://localhost:8000/api/v1/populations | jq
{
"北海道": [
"years": {
"1980": {
"all": 12345, # 総人口
"children": 6789 # 年少人口
},
# ...
}
],
# ...
}
表示のわかりやすさのため pretty print した値を表示 (
| jq
) しています.サーバの返す文字列は minify されたものでもかまいません一部省略して記述しています.コメントもわかりやすさのために記述しているので,この通りに返す必要はまったくありません.
数値は仮の値です.実際に取得した値が表示されるようにしてください
自己署名用証明書を作成し,それを使って HTTP/2 over TLS 1.3 でリクエストを受け付けられるようにしてください. HTTP 通信からのリダイレクトや HSTS,Alt-Svc 等の設定は任意です.
非機能要件
hyper, actix-web, axum のいずれかを使って Web アプリを構築してください
外部の API (適当なオープンデータ) からデータを取得するサービスを実装してください
ただし,これは非同期で実行されるようにしてください (非同期ランタイムは任意) .
ただし,ユースケースからは抽象にのみ依存するようにしてください
具象の 1 つとしてモックを実装し,ユニットテストでは外部へのアクセスなしでロジックを確認してください
エンドポイントを 1 つ作成し,先述したサービスを用いてデータを取得するようにしてください
ただし,コントローラとユースケースは分離してください
JWT を検証することによる認証機能を実装してください
ただし,これはコントローラとは分離し,それぞれのフレームワークにおけるミドルウェア (または Interceptor) のしくみを利用してください
鍵の生成などを行う必要はありませんので,こちらであらかじめ用意した鍵と JWT トークンを利用してください
いくらかのテストを追加してください.
サービスとユースケースにはユニットテストを追加してください
API の動作を確認する E2E テストを追加してください
この E2E テストについては,実際に RESAS API へアクセスするようにしてください
(オプション) 任意の DI ライブラリを利用するか, DI コンテナを自作して具象を注入してください
(オプション) 制作の過程はローカルの Git リポジトリで管理し, .git ディレクトリを残したまま提出してください
注意事項
すべての要件を満たすことができなくても評価は行えますので,そのまま提出してください
MSRV (Minimum Supported Rust Version) は 1.70.0 としてください.こちらでの動作確認時も 1.70.0 で行います.
サードパーティ製ライブラリを利用できます.ただし,ライブラリの利用条件について問題ないことを確認のうえ,外部のライブラリであることがわかる使い方をしてください.たとえば, Cargo の依存として追加することや, Git Submodule として追加することが挙げられます.どうしてもこれらの方法が使えないときは,コードを直接コピーして利用してもよいですが,入手元を記述し,どのファイルがそれに当たるかを明示してください.
RESAS API の利用には API キーの発行が必要ですので,ご自身で行っていただきますようにお願いします.
評価ポイント
機能要件・非機能要件を満たしているか
オプションの要件を満たしているか.満たしていなくても減点にはなりませんが,加点とはなります
適切にコードが分離・整理され,読みやすいような命名・構造となっているか.理由なく認知負荷の高いコードや重複の多いコードとなっていないか
Rust の言語機能や標準ライブラリ,エコシステムを適切に理解し,利用できているか
オプションとして Git リポジトリを提出した場合は,適切なコミットの粒度やメッセージが用いられているか
提出方法
アプリケーションのコード一式を zip (Deflate) 形式または tar.gz (tar + gzip) 形式でまとめて採用担当に E メールで送信してください.
ただし,ファイル権限の調整が必要であるため zip は推奨しません.
コード一式に target ディレクトリは含めないでください.
(オプション) コミット履歴を .git ディレクトリに残した状態で提出することができます.
