エンジニアスキルチェック

本スキルチェックでは、お好きな言語や方法でプログラムを実装していただきます。
課題に沿ったプログラムを実装し、応募キーワードを入手できればチャレンジ成功です。
チャレンジに成功したら「応募キーワード」と「実装したコード」を採用担当者までご連絡ください。

課題

指定されたHTTPエンドポイントに対して、指定間隔で繰り返し呼出を実行するプログラムを作成して下さい。 処理全体の流れは次のとおりです。(※ エンドポイントの仕様やレスポンスは後述)

1. 処理の開始

/challengesPOSTでHTTPリクエストを送信してチャレンジを開始します。

2. 呼出の実行

レスポンス中の呼出予定時刻(actives_at)の時刻に/challengesPUTでHTTPリクエストを送信します。 このときチャレンジID(id)X-Challenge-Idヘッダに付与する必要があります。

リクエストに成功すると次の呼出予定時刻を含むレスポンスが返るので、これをチャレンジ終了まで繰り返します。

3. 処理の終了

呼出予定時刻と実際に処理を受付けた時刻の差分の合計が500msを超過するとチャレンジ終了となります。

チャレンジが終了するとチャレンジ結果(result)を含むレスポンスが返ります。
規定回数リクエストを送信できるとチャレンジ成功となり、応募キーワードを含むページのURLがレスポンスに含まれます。

APIエンドポイント

課題で使用するAPIサーバーは http://challenge.z2o.cloud/ です。

POST /challenges

チャンレンジを作成します。このエンドポイントに初回のリクエストを送信しチャレンジを開始します。

パラメータ

種別 キー 概要
クエリ nickname ランキングに使用するニックネームを指定します (1文字以上、16文字以内)

レスポンス

チャレンジ

リクエスト例

$ curl -X 'POST' http://challenge.z2o.cloud/challenges?nickname=hoge

PUT /challenges

呼出を実行します。呼出予定時刻になったらこのエンドポイントにリクエストを送信します。

パラメータ

種別 キー 概要
ヘッダ X-Challenge-Id APIレスポンス(チャレンジ)に含む、 チャレンジID (id) を指定します。

レスポンス

チャレンジ

リクエスト例

$ curl -X 'PUT' -H 'X-Challenge-Id:xxxxxxxxxx' http://challenge.z2o.cloud/challenges

APIレスポンス

チャレンジ

チャレンジ内容を表すレスポンスです。
{
   "id": チャレンジID,
   "actives_at": 呼出予定時刻 (UNIXタイムミリ秒表記),
   "called_at": 処理受付時刻 (UNIXタイムミリ秒表記),
   "total_diff": 呼出予定時刻と処理受付時刻の差分の合計(ミリ秒),
   "result": {
     "attempts": 呼び出し回数,
     "url": 応募キーワードを含むページのURL (失敗時はnull)
   }
}
  • id, actives_at, called_at, total_diff はチャレンジ継続中のみレスポンスに含みます。
  • result はチャレンジ終了時のみレスポンスに含みます。
  • 呼出予定時刻とサーバーで受付けた時刻の差分が total_diff に蓄積され、500msを超えるとチャレンジ終了となります。

レスポンス例 (チャレンジ継続中)

{
   "id":"xxxxxxxxxx",
   "actives_at":1579938264219,
   "called_at":1579938263720,
   "total_diff":0
}

レスポンス例 (チャレンジ終了時・成功)

{
   "result": {
     "attempts": 100,
     "url": "/xxxxxxxx"
   }
}

レスポンス例 (チャレンジ終了時・失敗)

{
   "result": {
     "attempts": 3,
     "url": null
   }
}

エラー

エラー内容を表すレスポンスです。
{
   "error": エラーメッセージ
}

エラーメッセージ一覧

メッセージ 意味
invalid access method. 不正なHTTPメソッドです。
定義されていないHTTPメソッドで `/challenges` にリクエストした場合に発生します。
nickname is missing ニックネームが指定されていません。
チャレンジ作成時に `nickname` パラメータを指定していない場合に発生します。
challenge is not started. X-Challenge-Id: xxxxx チャレンジが開始されていません。
チャレンジIDのチャレンジが既に終了している場合、チャレンジIDが間違っている場合、チャレンジIDを指定していない場合に発生します。

ランキング

上位100人のランキングです。