NowAPIService クラス - iOS

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:13分
  • NowAPIService クラスは、指定された ServiceNow REST API に対して要求を実行できるようにする関数を提供します。

    表 : 1. プロパティ
    名前 タイプ Description (説明)
    構成 NowServiceConfiguration プロトコルに関連付けるサービス構成。

    NowAPIService - data(エンドポイント:NowAPIEndpoint、queryItems:[文字列:文字列]、httpHeaders:[文字列:文字列]、body:データ、completion:@escaping(結果<DataResponse、NowDataError>)

    指定された ServiceNow REST API にデータを要求し、完了ハンドラーを実行します。

    表 : 2. パラメーター
    名前 タイプ Description (説明)
    エンドポイント向け NowAPIEndpoint HTTP メソッド、エンドポイントへの相対パス、パスパラメーター、認証が必要かどうかなど、アクセスする ServiceNow REST API エンドポイントを含むオブジェクト。
    クエリアイテム アレイ オプション。エンドポイントのキー/値ペアとしてのクエリパラメーター。

    デフォルト:nil

    httpヘッダー アレイ オプション。エンドポイントで必要な HTTP ヘッダーをキーと値のペアとして要求します。

    デフォルト:nil

    本文 文字列 オプション。要求本文のパラメーター。

    デフォルト:nil

    完了 @escaping (Result<DataResponse、NowDataError>) REST API コールの完了後に実行する完了ハンドラー。
    完了ハンドラーの戻り値:
    • 成功:REST API コールから返されたデータを含む DataResponse。
    • 失敗:NowDataError
      • accessToken(アクセストークンプロバイダーエラー)
        • AccessTokenProviderError:アクセストークンプロバイダーのエラーコードまたはメッセージ。
          • アクセストークン取得に失敗しました
          • userSessionError(_エラー:エラー)

        アクセストークンにエラーがある場合にスローされます。

      • attachmentValidation

        添付ファイルが検証に失敗したときにスローされます。

      • badResponse(statusCode: HTTPStatusCode)
        • HTTPStatusCode:インスタンスから受信したステータスコード。

        要求が予期しない応答を返した場合にスローされます

      • cannotDecodeModel(デコードエラー)
        • DecodingError:デコードエラーが検出されました。

        Codable モデルを JSON からデコードできない場合にスローされます。

      • cannotDecodeProperty(タイプ:任意、差出人:文字列)
        • type:文字列からデコードするラップされた型。
        • from:指定されたタイプにデコードする文字列。

        文字列でラップされた値を JSON からデコードできない場合にスローされます。

      • cannotEncodeModel(エンコーディングエラー)
        • EncodingError:エンコードエラーが検出されました。

        Codable モデルを JSON にエンコードできない場合にスローされます。

      • cannotParseResponse

        インスタンスからの応答を予期される形式に解析できない場合にスローされます。

      • 無効な URL

        URL を形成できない場合にスローされます。たとえば、文字列に URL で無効な文字が含まれているか、空の文字列である場合などです。

      • missingAttachmentMetadata

        添付ファイルのメタデータヘッダーがない場合にスローされます。

      • missingServiceConfiguration

        予期されるサービス構成がない場合にスローされます。

      • missingSysID

        予期されるsys_idパラメーターがない場合にスローされます。

      • network(NetworkServiceError)
        • genericError(文字列)
        • operationCanceled
        • serviceDisabled
        • serverError(エラー)
        • systemError(エラー)

        ネットワークサービスでエラーが発生した場合にスローされます。

    表 : 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(エンドポイント:NowAPIEndpoint、queryItems:[文字列:文字列]、httpHeaders:[文字列:文字列]、body:データ)非同期スロー

    指定された ServiceNow REST API からのデータを要求します。

    表 : 4. パラメーター
    名前 タイプ Description (説明)
    エンドポイント向け NowAPIEndpoint HTTP メソッド、エンドポイントへの相対パス、パスパラメーター、認証が必要かどうかなど、アクセス ServiceNow REST API エンドポイントを含むオブジェクト。
    クエリアイテム アレイ オプション。キーと値のペアとしてのエンドポイントのクエリパラメーター 。

    デフォルト:nil

    httpヘッダー アレイ オプション。エンドポイントで必要な HTTP ヘッダーを キー/値ペアとして要求します。

    デフォルト:nil

    本文 文字列 オプション。body parameters を要求します。

    デフォルト:nil

    表 : 5. 返される内容
    タイプ Description (説明)
    データ応答 メソッドが成功したときに返されます。REST API コールからのデータ。
    NowDataError メソッドが失敗したときにスローされます。
    • accessToken(アクセストークンプロバイダーエラー)
      • AccessTokenProviderError:アクセストークンプロバイダーのエラーコードまたはメッセージ。
        • アクセストークン取得に失敗しました
        • userSessionError(_エラー:エラー)

      アクセストークンにエラーがある場合にスローされます。

    • attachmentValidation

      添付ファイルが検証に失敗したときにスローされます。

    • badResponse(statusCode: HTTPStatusCode)
      • HTTPStatusCode:インスタンスから受信したステータスコード。

      要求が予期しない応答を返した場合にスローされます

    • cannotDecodeModel(デコードエラー)
      • DecodingError:デコードエラーが検出されました。

      Codable モデルを JSON からデコードできない場合にスローされます。

    • cannotDecodeProperty(タイプ:任意、差出人:文字列)
      • type:文字列からデコードするラップされた型。
      • from:指定されたタイプにデコードする文字列。

      文字列でラップされた値を JSON からデコードできない場合にスローされます。

    • cannotEncodeModel(エンコーディングエラー)
      • EncodingError:エンコードエラーが検出されました。

      Codable モデルを JSON にエンコードできない場合にスローされます。

    • cannotParseResponse

      インスタンスからの応答を予期される形式に解析できない場合にスローされます。

    • 無効な URL

      URL を形成できない場合にスローされます。たとえば、文字列に URL で無効な文字が含まれているか、空の文字列である場合などです。

    • missingAttachmentMetadata

      添付ファイルのメタデータヘッダーがない場合にスローされます。

    • missingServiceConfiguration

      予期されるサービス構成がない場合にスローされます。

    • missingSysID

      予期されるsys_idパラメーターがない場合にスローされます。

    • network(NetworkServiceError)
      • genericError(文字列)
      • operationCanceled
      • serviceDisabled
      • serverError(エラー)
      • systemError(エラー)

      ネットワークサービスでエラーが発生した場合にスローされます。

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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. パラメーター
    名前 タイプ Description (説明)
    エンドポイント向け NowAPIEndpoint HTTP メソッド、エンドポイントへの相対パス、パスパラメーター、認証が必要かどうかなど、アクセスする ServiceNow REST API エンドポイントを含むオブジェクト。
    クエリアイテム アレイ オプション。エンドポイントのキー/値ペアとしてのクエリパラメーター。

    デフォルト:nil

    httpヘッダー アレイ オプション。エンドポイントで必要な HTTP ヘッダーをキーと値のペアとして要求します。

    デフォルト:nil

    本文 Data (データ) オプション。要求本文のパラメーター。

    デフォルト:nil

    表 : 7. 返される内容
    タイプ Description (説明)
    AnyPublisher<DataResponse、NowDataError> 成功:REST API によって返されたデータ。

    失敗:NowDataError

    • accessToken(アクセストークンプロバイダーエラー)
      • AccessTokenProviderError:アクセストークンプロバイダーのエラーコードまたはメッセージ。
        • アクセストークン取得に失敗しました
        • userSessionError(_エラー:エラー)

      アクセストークンにエラーがある場合にスローされます。

    • attachmentValidation

      添付ファイルが検証に失敗したときにスローされます。

    • badResponse(statusCode: HTTPStatusCode)
      • HTTPStatusCode:インスタンスから受信したステータスコード。

      要求が予期しない応答を返した場合にスローされます

    • cannotDecodeModel(デコードエラー)
      • DecodingError:デコードエラーが検出されました。

      Codable モデルを JSON からデコードできない場合にスローされます。

    • cannotDecodeProperty(タイプ:任意、差出人:文字列)
      • type:文字列からデコードするラップされた型。
      • from:指定されたタイプにデコードする文字列。

      文字列でラップされた値を JSON からデコードできない場合にスローされます。

    • cannotEncodeModel(エンコーディングエラー)
      • EncodingError:エンコードエラーが検出されました。

      Codable モデルを JSON にエンコードできない場合にスローされます。

    • cannotParseResponse

      インスタンスからの応答を予期される形式に解析できない場合にスローされます。

    • 無効な URL

      URL を形成できない場合にスローされます。たとえば、文字列に URL で無効な文字が含まれているか、空の文字列である場合などです。

    • missingAttachmentMetadata

      添付ファイルのメタデータヘッダーがない場合にスローされます。

    • missingServiceConfiguration

      予期されるサービス構成がない場合にスローされます。

    • missingSysID

      予期されるsys_idパラメーターがない場合にスローされます。

    • network(NetworkServiceError)
      • genericError(文字列)
      • operationCanceled
      • serviceDisabled
      • serverError(エラー)
      • systemError(エラー)

      ネットワークサービスでエラーが発生した場合にスローされます。

    次のコード例は、この関数を呼び出す方法を示しています。

    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)
    }