namespace Fruits
{
public class FruitsData
{
public string id { get; set; }
public string name { get; set; }
}
}
■CheckFruits.cs
List<FruitsData> fruitsList1 = new List<FruitsData>()
{
new FruitsData {Id = "1", Name = "Apple" },
new FruitsData {Id = "2", Name = "Banana" }
new FruitsData {Id = "3", Name = "Orange" }
new FruitsData {Id = "4", Name = "Grape" }
};
List<FruitsData> fruitsList2 = new List<FruitsData>()
{
new FruitsData {Id = "1", Name = "Apple" },
new FruitsData {Id = "2", Name = "Grape" }
new FruitsData {Id = "3", Name = "Grapefruit" }
new FruitsData {Id = "4", Name = "Strawberry" }
};
LaravelでAPIのリクエストをある回数以上行うと、「Too Many Attempts」のエラーが発生して一定時間経過するまでAPIを実行できなくなります。
このエラー文言の表示条件は、RateLimiterにて設定されています。
条件によって、この制限回数のカウント方法を変更する修正がしたかったのですが、対応方法がなかなか見つけられず時間がかかったため記事に残します。
やりたいこと
・ユーザー情報を取得できた場合:1分間に5回連続でAPIをリクエストすると、「Too Many Attempts」のエラーを発生させる
・ユーザー情報を取得できない場合:1時間に10回連続でAPIをリクエストすると、「Too Many Attempts」のエラーを発生させる
/**
* Executed after the view initialization.
*/
ngAfterViewInit() {
// makes torch availability information available to user
this.getCodeReader().isTorchAvailable.subscribe(x => this.torchCompatible.emit(x));
if (!this.autostart) {
console.warn('New feature \'autostart\' disabled, be careful. Permissions and devices recovery has to be run manually.');
// does the necessary configuration without autostarting
this.initAutostartOff();
return;
}
// configurates the component and starts the scanner
this.initAutostartOn();
}
/**
* Initializes the component and starts the scanner.
* Permissions are asked to accomplish that.
*/
initAutostartOn() {
return __awaiter(this, void 0, void 0, function* () {
this.isAutostarting = true;
let hasPermission;
try {
// Asks for permission before enumerating devices so it can get all the device's info
hasPermission = yield this.askForPermission();
}
catch (e) {
console.error('Exception occurred while asking for permission:', e);
return;
}
// from this point, things gonna need permissions
if (hasPermission) {
const devices = yield this.updateVideoInputDevices();
this.autostartScanner([...devices]);
}
});
}
/**
* Starts the scanner with the back camera otherwise take the last
* available device.
*/
autostartScanner(devices) {
const matcher = ({ label }) => /back|trás|rear|traseira|environment|ambiente/gi.test(label);
// select the rear camera by default, otherwise take the last camera.
const device = devices.find(matcher) || devices.pop();
if (!device) {
throw new Error('Impossible to autostart, no input devices available.');
}
this.device = device;
// @note when listening to this change, callback code will sometimes run before the previous line.
this.deviceChange.emit(device);
this.isAutostarting = false;
this.autostarted.next();
}
/**
* Starts the scanner with the back camera otherwise take the last
* available device.
*/
autostartScanner(devices) {
const matcher = ({ label }) => /back|trás|rear|traseira|environment|ambiente/gi.test(label);
// select the rear camera by default, otherwise take the last camera.
const device = devices.find(matcher) || devices.pop();
if (!device) {
throw new Error('Impossible to autostart, no input devices available.');
}
this.device = device;
// @note when listening to this change, callback code will sometimes run before the previous line.
this.deviceChange.emit(device);
this.isAutostarting = false;
this.autostarted.next(); // <- ここ!
}
② メソッドレスポンスの追加
レスポンスのHTTPステータスにバリエーションを持たせたい場合、最初にメソッドレスポンスを追加する必要があります。メソッドレスポンス画面を開き[➕ レスポンスの追加]をクリックし、追加したいHTTPステータスコードを入力し、確定してください。
今回は400と500を追加してみました。
③ 統合レスポンスの追加
続いて、HTTPステータスごとの統合レスポンスを作成します。
デフォルトをHTTPステータス200で使用することにして、新しくHTTPステータス400と500用の統合レスポンスを作成します。統合レスポンス画面を開き[➕ 統合レスポンスの追加]をクリックして下記の要領で統合レスポンスを追加してください。
use [データベース名];
-- トランザクションログ論理名を確認
SELECT name FROM sys.database_files where type = 1;
-- トランザクションログファイルを縮小
DBCC SHRINKFILE( [トランザクションログ論理名] , [縮小後の容量(MB)]);