API の保護
@secureApi decorator を使用して、API connector への access を保護・管理します。
この decorator を使用すると、各 endpoint を個別に、または connector 内のすべての endpoint を保護できます。
@secureApi decorator を使用する場合、decorate された function は ApiCallContext type(Python では dict)の parameter を受け取ります。これは API call の完全な context を提供します。endpoint ID、server URL、HTTP method、request parameter などの detail が含まれます。
security function は boolean を返します。true は request を許可し、false は拒否します。
Squid は 2 種類の API connector をサポートしており、どちらも同じ @secureApi decorator を使用して保護できます。
これら 2 種類は、OpenAPI document を使用して提供される OpenAPI と、通常の REST API です。
特定 endpoint の保護
- TypeScript
- Python
import { secureApi, SquidService, ApiCallContext } from '@squidcloud/backend';
export class ExampleService extends SquidService {
@secureApi('usersApi', 'updateUserSalary')
secureUpdateUserSalaryEndpoint(context: ApiCallContext): boolean {
// TODO - Implement your security logic here
}
}
from squidcloud_backend import SquidService, secure_api
class ExampleService(SquidService):
@secure_api('usersApi', 'updateUserSalary')
def secure_update_user_salary_endpoint(self, context: dict) -> bool:
# TODO - Implement your security logic here
return False
Connector 内のすべての endpoint の保護
- TypeScript
- Python
import { secureApi, SquidService, ApiCallContext } from '@squidcloud/backend';
export class ExampleService extends SquidService {
@secureApi('usersApi')
secureUsersApi(context: ApiCallContext): boolean {
// TODO - Implement your security logic here
}
}
from squidcloud_backend import SquidService, secure_api
class ExampleService(SquidService):
@secure_api('usersApi')
def secure_users_api(self, context: dict) -> bool:
# TODO - Implement your security logic here
return False
上記の code sample は、@secureApi decorator を使用して API connector を保護する方法を示しています。この decorator は 2 つの parameter を受け取ります。
- Squid Console で確認できる API connector の ID。
- (Optional)保護する endpoint の name。
endpoint の name を指定しない場合、@secureApi decorator は connector 内のすべての endpoint を保護します。
TypeScript では context は type 付きの ApiCallContext object です。Python では security function は integrationId、endpointId、url、method、body などを key とする同じ context を dict として受け取ります。
Python では、使用しない場合でも security function に必ず context parameter を宣言してください。TypeScript とは異なり、Python は余分な call argument を無視しません。