Compartir vía


Tutorial: llamada a una API web protegida en la aplicación iOS (Swift)

Este es el cuarto tutorial de la serie de tutoriales que le guía en el registro de usuarios y la llamada a una API web protegida utilizando Id. externa de Microsoft Entra.

En este tutorial, hará lo siguiente:

  • Llame una API web protegida.

Requisitos previos

  • Tutorial: inicio de sesión de usuarios en la aplicación móvil de iOS (Swift)

  • Un registro de API que expone al menos un ámbito (permisos delegados) y un rol de aplicación (permiso de aplicación), como ToDoList.Read. Si aún no lo ha hecho, siga las instrucciones para llamar a una API en una aplicación móvil de iOS de ejemplo para tener una API web de ASP.NET Core protegida funcionalmente. Asegúrese de completar los pasos siguientes:

    • Registrar una aplicación de API web.
    • Configuración de ámbitos de API.
    • Configuración de los roles de aplicación.
    • Configuración de notificaciones opcionales.
    • Clonación o descarga de la API web de ejemplo.
    • Configuración y ejecución de la API web de ejemplo.

Llamada a la API

Para llamar a una API web protegida desde la aplicación de iOS, use el siguiente código:

    func getContentWithToken() {
        // Specify the API endpoint in _Configuration.swift_ file you created earlier
        guard let url = URL(string: Configuration.kProtectedAPIEndpoint) else {
            let errorMessage = "Invalid API url"
            print(errorMessage)
            updateLogging(text: errorMessage)
            return
        }
        var request = URLRequest(url: url)
        
        // Set the Authorization header for the request. We use Bearer tokens, so we specify Bearer + the token we got from the result
        request.setValue("Bearer \(self.accessToken)", forHTTPHeaderField: "Authorization")
        
        self.updateLogging(text: "Performing request...")
        
        URLSession.shared.dataTask(with: request) { data, response, error in
            
            if let error = error {
                self.updateLogging(text: "Couldn't get API result: \(error)")
                return
            }
            
            guard let httpResponse = response as? HTTPURLResponse,
                  (200...299).contains(httpResponse.statusCode)
            else {
                self.updateLogging(text: "Couldn't get API result: \(error)")
                return
            }
            
            guard let data = data, let result = try? JSONSerialization.jsonObject(with: data, options: []) else {
                self.updateLogging(text: "Couldn't deserialize result JSON")
                return
            }
            
            self.updateLogging(text: """
                                Accessed API successfully using access token.
                                HTTP response code: \(httpResponse.statusCode)
                                HTTP response body: \(result)
                                """)
            
            }.resume()
    }

El código especifica el punto de conexión de API, lo que garantiza su validez. A continuación, crea un objeto de solicitud y establece el encabezado de autorización con el token de acceso obtenido. Después de registrar el inicio de la solicitud, realiza la solicitud de forma asincrónica mediante URLSession.

Tras la finalización, comprueba si hay errores durante la solicitud. Si se produce un error, registra el mensaje correspondiente. A continuación, comprueba el éxito de la respuesta HTTP, asegurándose de que se encuentra dentro del rango de 200 a 299 códigos de estado. Después, deserializa los datos JSON recibidos. Por último, actualiza el texto de registro, lo que indica el acceso correcto a la API junto con los detalles de respuesta HTTP pertinentes.