ServiceNowインスタンスでのパブリック REST API とのやり取り
Mobile SDKは、AndroidアプリケーションがServiceNowインスタンスでパブリック REST API を呼び出せるようにする機能を提供します。
NowAPIService API を使用すると、ベース REST API ServiceNowパブリック REST API のいずれかとやり取りしたり、インスタンス内にカスタム REST API を作成して Android アプリケーションから呼び出したりできます。
ServiceNow REST API を呼び出す前に、makeNowAPIService() メソッドを呼び出してサービスのインスタンスを作成する必要があります。成功した場合はコールバックでサービスインスタンスが返され、そうでない場合はエラーがスローされます。
NowAPIService オブジェクトを初期化する方法は次のとおりです。
/**
* Helper class used to handle different Now service instances. It has an application scope or is Singleton
*/
@Singleton
class SdkManager @Inject constructor() {
private var nowApiService: NowAPIService? = null
/**
* Create the NowAPIService once in the lifetime of the application inside the Application class or another manager class
* that will be injected into other classes via dagger/hilt.
* NowAPIService should be created after initializing the NowSDK
*/
suspend fun getNowApiService(): NowAPIService? {
if (nowApiService != null) return nowApiService
return NowDataSDK.makeAPIService(URL("https://instance-name.service-now.com")).getOrThrow()
.also { this.nowApiService = it }
}
}NowAPIService オブジェクトが初期化されたら、NowAPIService data() メソッドを使用して、呼び出す REST エンドポイントとそれに関連するすべてのパラメーターを指定します。
suspend fun makeNowApiCall() {
val apiService = sdkManager.getNowApiService()
val apiPath = "api/now/table/sn_customerservice_case"
val endpoint = NowAPIService.Endpoint(HttpMethod.GET, apiPath, true)
val fieldNames = "sys_id,number,short_description,number,priority,state," +
"opened_at,account.name,account.number,contact.name,contact.email," +
"contact_type,assignment_group.name,assigned_to.name"
val queryParamsMap = mapOf("sysparm_fields" to fieldNames, "sysparm_limit" to "10")
val queryParams = QueryParams.Builder().addAll(queryParamsMap).build()
val response = runCatching {
apiService?.data(endpoint = endpoint, queryParams = queryParams)?.execute()
}
if (response.isSuccess) {
val resultString = response.getOrNull()?.body?.let { String(it) }
} else {
// Handle error
}
}