Interagir avec l’API REST publique sur une ServiceNow instance
Le Mobile SDK fournit une fonctionnalité qui permet Android aux applications d’appeler l’API REST publique sur une ServiceNow instance.
À l’aide de l’API NowAPIService, vous pouvez interagir avec n’importe quelle API REST publique de base ServiceNow ou créer des API REST personnalisées au sein de l’instance et les appeler à partir de votre Android application.
Avant d’appeler une ServiceNow API REST, vous devez appeler la méthodemakeNowAPIService() pour créer une instance du service. L’instance de service est renvoyée dans le rappel en cas de réussite, sinon une erreur est générée.
L’exemple suivant montre comment initialiser un objet 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 }
}
}Une fois l’objet NowAPIService initialisé, utilisez la méthode NowAPIService data() pour spécifier le point de terminaison REST à appeler et tous ses paramètres associés :
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
}
}