KeyprApi 0.9.1

KeyprApi 0.9.1

Nicholas Mata维护。



KeyprApi 0.9.1

  • Nicholas Mata

KeyprApi

CI Status Version License Platform

KeyprApi是对Keypr端点的封装。

需求

  • iOS 9.0+

安装

Cocoapods

KeyprApi可以通过CocoaPods获得。要安装它,只需将以下行添加到Podfile中:

pod "KeyprApi"

Carthage

要安装它,将以下行添加到Cartfile中:

github "MataDesigns/KeyprApi-iOS"

特性

  • 支持身份验证流程
    • 联邦标识符
    • 自动处理过期的JWT和访问令牌。
    • 🚫OAuth
  • 获取用户的预订
  • 办理预订的入住/退房
  • 通过标识符查找预订
  • 🚫通过确认码和姓氏查找预订

使用方法

重要!!!当前只支持类(如果你使用结构体,这将不能工作)

简介(联邦)

理解JWT

JWT或JSON Web Token是一种紧凑且自包含的方式,可以像JSON对象一样安全地在各方之间传输信息。由于它是数字签名的,因此信息可以被验证和信赖。

在Keypr的联邦流程中,如果想要使用第三方系统作为身份提供者,则会使用JWT。

Keypr要求用RS256算法对JWT进行签名。

JWT有效负载必须至少包含以下内容

  • iss - 该字段标识JWT由哪个系统生成的。公钥与此URI关联。
  • exp - 令牌过期时间的数值日期格式。这是一个JSON数值,表示从1970-01-01T00:00:00Z UTC到指定UTC日期/时间秒数的数量,忽略闰秒。
  • given_name - 用户的第一个名字
  • 姓氏 - 用户的姓氏
  • 电子邮件 - 用户的电子邮件地址

关于JWT的更多信息,请在这里了解

开始使用

由于JWT应该在服务器端生成,因此需要一个JWTGenerator构造器参数。当JWT为空或已过期时,将调用生成器,因此这应该总是导致有效的JWT。

Keypr目前有两个环境:测试环境和生产环境。

import KeyprApi

func getJWTFromServer(gotJWT: (String)-> Void)) {
  contactYourServerForJWT() { response in
    gotJWT(response.jwt)
  }
}

...

let api = KeyprApi(jwtGenerator: self.getJWTFromServer, environment: .staging)

办理入住/退房

一站式解决方案

此解决方案会为你异步执行keypr任务,包含超时处理。

例如,调用/async_(check_in或check_out),然后调用task/(从/async调用的taskId)任务,直到成功、失败或超时发生。

let api = KeyprApi(jwtGenerator: self.getJWTFromServer, environment: .staging)
let reservationId = // use api to get reservation

api.perform(task: .checkIn, reservationId: reservationId, timeout: 10) { (successful, task, error) in
    print(successful)
}
启动异步任务流程

除非你知道你在做什么,否则请使用上面的“一站式解决方案”⬆️

这只会启动入住/退房流程,这不会通知你流程是否成功完成。您需要通过检查(taskId:)函数来确认。

let api = KeyprApi(jwtGenerator: self.getJWTFromServer, environment: .staging)
let reservationId = // use api to get reservation.

api.start(task: .checkIn, reservationId: reservationId) { (task, error) in
    print("TaskId: \(task.id)")
}
检查异步任务

除非你知道你在做什么,否则请使用上面的“一站式解决方案”⬆️

这用于使用从start(task:)函数获得的taskId检查异步任务。

let taskId = // Some task id.

api.check(taskId: taskId) { (task, error) in
    if task.attributes.successful {
        print("Woohoo Checked In!!")
    }
    if task.attributes.failed {
        print("Oops something went wrong...")
    }
    if task.attributes.status == "PENDING" {
        // check again
    }
}

更多文档即将推出 …

目前请查看测试

作者

尼古拉斯·玛塔,[email protected]

许可协议

KeyprApi 在 MIT 许可协议下可用。有关更多信息,请参阅 LICENSE 文件。