Interagir avec l’API REST publique sur une ServiceNow instance
Il 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 l’une des API REST publiques de baseServiceNow, ou créer des API REST personnalisées au sein de l’instance et les appeler à partir de votre Android application.
Avant d’effectuer un appel à une ServiceNow API REST, vous devez appeler la méthodemakeNowAPIService() pour créer une instance du service. En cas de réussite, l’instance de service est renvoyée dans le rappel. Dans le cas contraire, une erreur est générée.
Les éléments suivants montrent 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 data () NowAPIService 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
}
}