NowAPIService 클래스 - iOS

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기12분
  • NowAPIService 클래스는 지정된 ServiceNow REST API에 대한 요청을 수행할 수 있는 함수를 제공합니다.

    표 1. 속성
    이름 유형 설명
    구성 NowService구성 프로토콜과 연결할 서비스 구성입니다.

    NowAPIService - data(for endpoint: NowAPIEndpoint, queryItems: [String: String], httpHeaders: [String: String], body: Data, completion: @escaping (Result<DataResponse, NowDataError>)

    지정된 ServiceNow REST API에서 데이터를 요청한 다음 완료 핸들러를 실행합니다.

    표 2. 매개변수
    이름 유형 설명
    엔드포인트용 NowAPIEndpoint HTTP 메서드, 엔드포인트에 ServiceNow 대한 상대 경로, 경로 매개변수, 인증 필요 여부 등 액세스할 REST API 엔드포인트를 포함하는 객체입니다.
    쿼리 항목 배열 옵션입니다. 엔드포인트에 대한 쿼리 매개변수는 키/값 쌍입니다.

    기본값: nil

    http헤더 배열 옵션입니다. 엔드포인트에 필요한 HTTP 헤더를 키/값 쌍으로 요청합니다.

    기본값: nil

    본문 문자열 옵션입니다. 요청 본문 매개변수입니다.

    기본값: nil

    완료 @escaping (결과<DataResponse, NowDataError>) REST API 호출이 완료된 후 실행할 완료 핸들러입니다.
    완료 처리기의 반환 값:
    • 성공: REST API 호출에서 반환된 데이터를 포함하는 DataResponse입니다.
    • 실패: NowDataError
      • accessToken(AccessTokenProviderError)
        • AccessTokenProviderError: 액세스 토큰 공급자의 오류 코드 또는 메시지입니다.
          • accessTokenRetrievalFailed
          • userSessionError(_ 오류: 오류)

        액세스 토큰에 오류가 있을 때 throw됩니다.

      • attachmentValidation (첨부 파일 유효성 검사)

        첨부 파일이 유효성 검사에 실패할 때 throw됩니다.

      • badResponse(statusCode: HTTPStatusCode)
        • HTTPStatusCode: 인스턴스에서 받은 상태 코드입니다.

        요청이 예기치 않은 응답을 반환할 때 throw됩니다

      • cannotDecodeModel(디코딩 오류)
        • DecodingError: 디코딩 오류가 감지되었습니다.

        JSON에서 코드 가능 모델을 디코딩할 수 없을 때 throw됩니다.

      • cannotDecodeProperty(유형: 임의, from: 문자열)
        • type: 문자열에서 디코딩하는 래핑된 형식입니다.
        • from: 지정된 형식으로 디코딩할 문자열입니다.

        문자열로 래핑된 값을 JSON에서 디코딩할 수 없을 때 throw됩니다.

      • cannotEncodeModel(인코딩 오류)
        • EncodingError: 인코딩 오류가 감지되었습니다.

        코드 가능 모델을 JSON으로 인코딩할 수 없을 때 throw됩니다.

      • cannotParse응답

        인스턴스의 응답을 필요한 형식으로 구문 분석할 수 없을 때 throw됩니다.

      • 유효하지 않은 URL

        URL을 구성할 수 없을 때 throw됩니다. 예를 들어 문자열에 URL에서 잘못된 문자가 포함되어 있거나 빈 문자열인 경우입니다.

      • missingAttachmentMetadata

        첨부 파일 메타데이터 헤더가 없을 때 throw됩니다.

      • missingServiceConfiguration

        예상된 서비스 구성이 누락된 경우 throw됩니다.

      • missingSysID

        예상된 sys_id 매개 변수가 없을 때 throw됩니다.

      • 네트워크(NetworkServiceError)
        • genericError(문자열)
        • 운영취소됨
        • 서비스 비활성화됨
        • serverError(오류)
        • systemError(오류)

        네트워크 서비스에 오류가 발생할 때 throw됩니다.

    표 3. 반환
    유형 설명
    없음

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    struct Endpoint: NowAPIEndpoint {
      let httpMethod: HTTPMethod
      let relativePath: String
      let requiresAuthentication: Bool
    }
    
    /// HTTP request method
    public enum HTTPMethod: CaseIterable {
        case options, get, head, post, put, patch, delete, trace, connect
    }
    let relativePath = “/api/now/account”
    let endPoint = Endpoint(httpMethod: HTTPMethod.get, relativePath: relativePath, requiresAuthentication: true)
    
    apiService.data(for: endPoint, queryItems: [“name”: “abel”], httpHeaders: httpHeaders, body: body.data(using: .utf8)) { [weak self] (result) in
      switch result {
        case .success(let response):
        // Data request successful
        case .failure(let error):
        // Data request failed, return NowDataError
        // .failure(error)
      }
    }
    

    NowAPIService - data(for endpoint: NowAPIEndpoint, queryItems: [String: String], httpHeaders: [String: String], body: Data) 비동기 throws

    지정된 ServiceNow REST API에서 데이터를 요청합니다.

    표 4. 매개변수
    이름 유형 설명
    엔드포인트용 NowAPIEndpoint HTTP 메서드, 엔드포인트에 ServiceNow 대한 상대 경로, 경로 매개변수, 인증 필요 여부 등 액세스할 수 있는 REST API 엔드포인트를포함하는 객체입니다.
    쿼리 항목 배열 옵션입니다. 엔드포인트에 대한 쿼리 매개변수 는 키/값 쌍입니다.

    기본값: nil

    http헤더 배열 옵션입니다. 엔드포인트에 필요한 HTTP 헤더를 키/값 쌍으로 요청합니다.

    기본값: nil

    본문 문자열 옵션입니다. Request body parameters.

    기본값: nil

    표 5. 반환
    유형 설명
    데이터리스폰스 메서드가 성공할 경우 반환됩니다. REST API 호출의 데이터입니다.
    NowDataError 메서드가 실패할 때 throw됩니다.
    • accessToken(AccessTokenProviderError)
      • AccessTokenProviderError: 액세스 토큰 공급자의 오류 코드 또는 메시지입니다.
        • accessTokenRetrievalFailed
        • userSessionError(_ 오류: 오류)

      액세스 토큰에 오류가 있을 때 throw됩니다.

    • attachmentValidation (첨부 파일 유효성 검사)

      첨부 파일이 유효성 검사에 실패할 때 throw됩니다.

    • badResponse(statusCode: HTTPStatusCode)
      • HTTPStatusCode: 인스턴스에서 받은 상태 코드입니다.

      요청이 예기치 않은 응답을 반환할 때 throw됩니다

    • cannotDecodeModel(디코딩 오류)
      • DecodingError: 디코딩 오류가 감지되었습니다.

      JSON에서 코드 가능 모델을 디코딩할 수 없을 때 throw됩니다.

    • cannotDecodeProperty(유형: 임의, from: 문자열)
      • type: 문자열에서 디코딩하는 래핑된 형식입니다.
      • from: 지정된 형식으로 디코딩할 문자열입니다.

      문자열로 래핑된 값을 JSON에서 디코딩할 수 없을 때 throw됩니다.

    • cannotEncodeModel(인코딩 오류)
      • EncodingError: 인코딩 오류가 감지되었습니다.

      코드 가능 모델을 JSON으로 인코딩할 수 없을 때 throw됩니다.

    • cannotParse응답

      인스턴스의 응답을 필요한 형식으로 구문 분석할 수 없을 때 throw됩니다.

    • 유효하지 않은 URL

      URL을 구성할 수 없을 때 throw됩니다. 예를 들어 문자열에 URL에서 잘못된 문자가 포함되어 있거나 빈 문자열인 경우입니다.

    • missingAttachmentMetadata

      첨부 파일 메타데이터 헤더가 없을 때 throw됩니다.

    • missingServiceConfiguration

      예상된 서비스 구성이 누락된 경우 throw됩니다.

    • missingSysID

      예상된 sys_id 매개 변수가 없을 때 throw됩니다.

    • 네트워크(NetworkServiceError)
      • genericError(문자열)
      • 운영취소됨
      • 서비스 비활성화됨
      • serverError(오류)
      • systemError(오류)

      네트워크 서비스에 오류가 발생할 때 throw됩니다.

    다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    do {
        let dataResponse = try await apiService.data(for: endpoint, queryItems: queryItems, httpHeaders: httpHeaders, body: body)
        // Data request successful
    } catch {
        // Data request failed, NowDataError thrown
    }

    NowAPIService - data(for endpoint: NowAPIEndpoint, queryItems: [String: String]? = nil, httpHeaders: [String: String]? = nil, body: Data? = nil)

    지정된 ServiceNow REST API에서 데이터를 요청합니다.

    주:
    이 메서드는 더 이상 사용되지 않습니다. 대신 메서드의 async/await 구현을 사용해야 합니다.
    표 6. 매개변수
    이름 유형 설명
    엔드포인트용 NowAPIEndpoint HTTP 메서드, 엔드포인트에 ServiceNow 대한 상대 경로, 경로 매개변수, 인증 필요 여부 등 액세스할 REST API 엔드포인트를 포함하는 객체입니다.
    쿼리 항목 배열 옵션입니다. 엔드포인트에 대한 쿼리 매개변수는 키/값 쌍입니다.

    기본값: nil

    http헤더 배열 옵션입니다. 엔드포인트에 필요한 HTTP 헤더를 키/값 쌍으로 요청합니다.

    기본값: nil

    본문 데이터 옵션입니다. 요청 본문 매개변수입니다.

    기본값: nil

    표 7. 반환
    유형 설명
    AnyPublisher<DataResponse, NowDataError> 성공: REST API에서 반환된 데이터입니다.

    실패: NowDataError

    • accessToken(AccessTokenProviderError)
      • AccessTokenProviderError: 액세스 토큰 공급자의 오류 코드 또는 메시지입니다.
        • accessTokenRetrievalFailed
        • userSessionError(_ 오류: 오류)

      액세스 토큰에 오류가 있을 때 throw됩니다.

    • attachmentValidation (첨부 파일 유효성 검사)

      첨부 파일이 유효성 검사에 실패할 때 throw됩니다.

    • badResponse(statusCode: HTTPStatusCode)
      • HTTPStatusCode: 인스턴스에서 받은 상태 코드입니다.

      요청이 예기치 않은 응답을 반환할 때 throw됩니다

    • cannotDecodeModel(디코딩 오류)
      • DecodingError: 디코딩 오류가 감지되었습니다.

      JSON에서 코드 가능 모델을 디코딩할 수 없을 때 throw됩니다.

    • cannotDecodeProperty(유형: 임의, from: 문자열)
      • type: 문자열에서 디코딩하는 래핑된 형식입니다.
      • from: 지정된 형식으로 디코딩할 문자열입니다.

      문자열로 래핑된 값을 JSON에서 디코딩할 수 없을 때 throw됩니다.

    • cannotEncodeModel(인코딩 오류)
      • EncodingError: 인코딩 오류가 감지되었습니다.

      코드 가능 모델을 JSON으로 인코딩할 수 없을 때 throw됩니다.

    • cannotParse응답

      인스턴스의 응답을 필요한 형식으로 구문 분석할 수 없을 때 throw됩니다.

    • 유효하지 않은 URL

      URL을 구성할 수 없을 때 throw됩니다. 예를 들어 문자열에 URL에서 잘못된 문자가 포함되어 있거나 빈 문자열인 경우입니다.

    • missingAttachmentMetadata

      첨부 파일 메타데이터 헤더가 없을 때 throw됩니다.

    • missingServiceConfiguration

      예상된 서비스 구성이 누락된 경우 throw됩니다.

    • missingSysID

      예상된 sys_id 매개 변수가 없을 때 throw됩니다.

    • 네트워크(NetworkServiceError)
      • genericError(문자열)
      • 운영취소됨
      • 서비스 비활성화됨
      • serverError(오류)
      • systemError(오류)

      네트워크 서비스에 오류가 발생할 때 throw됩니다.

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    struct Endpoint: NowAPIEndpoint {
        let httpMethod: HTTPMethod
        let relativePath: String
        let requiresAuthentication: Bool
    }
    
    /// HTTP request method
    public enum HTTPMethod: CaseIterable {
        case options, get, head, post, put, patch, delete, trace, connect
    }
    let relativePath = "/api/now/account"
    let endPoint = Endpoint(httpMethod: HTTPMethod.get, relativePath: relativePath, requiresAuthentication: true)
    
    // Using Combine
    apiService.data(for: Endpoint(httpMethod: httpMethod, relativePath: endpointPath, requiresAuthentication: requiresAuthentication), queryItems: queryItems, httpHeaders: httpHeaders, body: body.data(using: .utf8))
      .receive(on: DispatchQueue.main)
      .sink { [weak self] (comp) in
        if case let .failure(error) = comp {
          // Data request failed, return NowDataError
        }
      } receiveValue: { [weak self] (response) in
        // Data request successful
        self?.publish(data: response.data)
      }
      .store(in: &self.subscriptions)
    }