2020/08/02

私的HTTPステータスコード選択ルール

初めに

APIサーバーを作る際にどのHTTPステータスコードを返せばよいか毎回悩むため忘れないようにメモ

※個人的なメモなので信頼性は無いです


成功 (2xx系)

処理が正常に完了した場合。
200 OK のみでも問題ないと思う

200 OK

他の2xx系の条件に当てはまらない場合に使用

201 Created

ファイルのアップロード、データベースへのデータ登録等の作成処理が成功した際に使用
POSTメソッドで使用

202 Accepted

処理を受け付けたがバックグラウンドで処理が続行中など、まだ処理が完了していない場合に使用
バッチ処理などで使用


失敗 (クライアント側に問題あり 4xx系)

クライアント側の問題で処理に失敗した際に使用

400 Bad Request

他の4xx系の条件に当てはまらない場合に使用

401 Unauthorized

認証エラーの際に使用
ログインに失敗した、認証のない人がアクセスしてきた、許可していないIPアドレスからのアクセス等

403 Forbidden

認証を受けている人が認証外のデータにアクセスしようとした時に使用

404 Not Found

存在しないデータにアクセスしようとした時に使用

413 Request Entity Too Large

サーバーへ送ろうとしているデータサイズが大きすぎて処理できない際に使用

429 Too Many Requests

単位時間あたりのアクセス数が上限を超えたときに使用
※リトライで復旧する場合に使用


失敗 (サーバー側に問題あり 5xx系)

サーバー側の問題で処理に失敗した際に使用

500 Internal Server Error

他の5xx系の条件に当てはまらない場合に使用

503 Service Unavailable

外部サーバーやデータベースにアクセスしようとした際に外部サーバが過負荷で通信できなかったときに使用
※リトライすることで復旧する場合に使用



参考文献

先輩と覚える HTTP ステータスコード

HTTP レスポンスステータスコード

2018/08/30

[Java] Google App Engine で自作のJarライブラリを読み込ませる

はじめに

eclipseで自作jarライブラリをビルドパスに登録すると問題なくコンパイルされる。
ただGAEにデプロイすると「NoClassDefFoundError」と自作jarのクラスが見つからないという例外が発生する。

その対処法を調べたのでここにまとめる。
※他にもっと効率のいい方法があると思います。

手順

  1. 自作jarファイルをGAEにデプロイするプロジェクトのフォルダの「(GAEプロジェクト)/src/main/webapp/WEB-INF/lib/」フォルダへコピー
  2. eclipseを起動し、下記のように自作jarまで開く
  3. jarを右クリック -> ビルド・パス -> ビルド・パスに追加 をクリック
  4. これでGAEへデプロイしても問題なく動作するはず







[Java] Google App Engine で「No handlers matched this URL.」が出る

開発中突然、GAEにデプロイしたアプリが @webservlet で指定したURLを認識せず、404 not found を返すようになったので、その対処法メモ。

状況

  • デプロイ時にはエラーなどは出ない
  • htmlなどの静的ファイルにはアクセスできる
  • @webservlet で指定したURLにアクセスしても「404 not found」が返り。
  • Google Stackdriver Loggingのアクセスログを見ても「No handlers matched this URL.」のみでJavaのエラーが出ているわけではない。
    • 挙動的には@webservlet で指定したURLを読み取っていないイメージ
  • 別のプロジェクトを用意し、GAEにデプロイすると問題なく動作する。
    • eclipseのプロジェクトの設定が原因?

対処法

問題が出るプロジェクトのフォルダを見ると、「src」「target」「.setting (隠しフォルダ)」の他に正常なプロジェクトには存在しない「bin」というフォルダがあった。

binフォルダを別の場所に移動したところ、上記の問題が発生しなくなった。

binフォルダが悪さをしていたのが原因

以上




2018/02/23

[Java 8] JSPファイルをGoogle App Engineにデプロイできない

Google App Engine (GAE) にJava Server Pages (JSP)ファイル込みのコードをデプロイ(アップロード)しようとすると、エラーが出て失敗するためその対処法メモ。

2018/01/29

[Java] Google App Engine で管理者用ページを作る

Google App Engine でデータ登録などに使用する管理者用ページを作る

環境

  • Google App Engine Standard
  • Cloud Tools for Eclipse
  • Java 8

web.xmlの設定

webapp/WEB-INF/web.xml に以下の項目を追記する
<security-constraint>
  <web-resource-collection>
    <web-resource-name>admin</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

url-patternで管理者アカウントが必要なページを指定。
この場合は /admin/ 以下のページ全てが対象

role-nameを*にするとGoogleアカウントを持っている人すべてがログインできる。

管理者の設定

管理者の設定はGoogle Cloud Console の「IAMと管理 -> IAM」から設定

projectを作成したオーナーはApp Engineの管理者権限がデフォルトで割り当てられているので追加の設定は無し


別のアカウントログインできるようにするには「追加」から以下の図のように「App Engine -> App Engine 管理者」で別アカウントのGmailのアドレスを入力して権限を与えること


アクセス

App Engine にデプロイしてから対応するページにアクセスすると以下の図のようなログイン画面が表示される


管理者アカウントだとhtml、jspページが表示される。

許可のないアカウントだと 403 Forbidden 「Error: Forbidden」が表示される

参考

web.xml による認証の設定、管理者の指定 - Google App Engine 入門

2018/01/25

[BOINC] GPUプロジェクトのGPU使用率とメモリ使用率

はじめに

BOINCでは数値計算にグラフィックボード(GPU)を使用できる。
ただ、プロジェクトによってはGPUの使用率が低かったり、GPUメモリの使用量が多く処理が遅くなることがあるため、各プロジェクトの大雑把なGPU使用率、メモリ使用量をまとめてみた。

BOINCでグラフィックボードを買うときの参考にどうぞ。

TechPowerUp GPU-Z

GPU使用率、メモリ使用量の測定にはTechPowerUp GPU-Zというソフトを使用。



環境

Windows 7 64bit
CPU:Intel Core i7 6700K + Intel HD Graphics 530
Memory:16 GB DDR4
GPU:Radeon RX 480 (4GB)

Radeon RX 480 (4GB)の場合

プロジェクト名タスク、アプリケーション名GPU Load (%)Memory Usage(Dedicated + Dynamic) (MB)
Collatz ConjectureCollatz Sieve 1.21 (opencl_amd_gpu)97594+222
Einstein@homeGamma-ray pulsar binary search #1 on GPUs 1.18 (FGRPopenclK1_ati)632216+314
Enigma@homeEnigma GPU 1.11 (opencl_ati_101)96801+220
MilkyWay@homeMilkyWay@Home 1.46 (opencl_ati_101)74717+319
Moo ! WrapperDistributed.net Client 1.04 (open_ati_101)88384+150
PrimeGridAP27 Search v2.02 (opencl_ati_AP27)971723+215
PrimeGridPPS (Siece) 1.41 (openclatiPPSsiece)501470+305
SETI@homeSETI@home v8 8.22 (opencl_ati5_SoG_nocal)80755+260

Intel HD Graphics 530の場合

プロジェクト名タスク、アプリケーション名GPU Load (%)Memory Usage (MB)
SETI@homeSETI@hime v8 8.2095266
SETI@home BetaSETI@hime v8 8.20 (opencl_intel_gpu_sah)94263

2018/01/21

[Java] Google Cloud ライブラリで例外 NoSuchMethodError が発生する問題

Google Cloud StorageのJavaライブラリを使用した時に、以下の例外が発生した際の対処法メモ

発生した例外
Caused by: java.lang.NoSuchMethodError: com.google.api.gax.core.GaxProperties.getLibraryVersion(Ljava/lang/Class;)Ljava/lang/String

MavenでCloud StorageとCloud Loggingを入れていると実行時に例外が発生する

入れていたライブラリとバージョン
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.15.0</version>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-logging</artifactId>
<version>1.15.0</version>

調べてみるとStorageとLoggingで使用しているgaxというライブラリのバージョンが異なっており、それが原因でエラーが発生したようだ。

仮対処として使用していないLoggingのライブラリを削除した所、例外は発生しなくなった。


参考
java.lang.ClassNotFoundException: com.google.api.gax.rpc.ClientSettings when using Firestore
https://github.com/GoogleCloudPlatform/google-cloud-java/issues/2496