您可以使用Zendesk亚博自定义对象为产品或服务构建自定义API。然后,您可以使用定制的API为公司的web和移动应用程序添加功能,如果该公司有帐户,还可以使用Zendesk Support中的代理界面。亚博

本教程描述如何使用Zendesk自定义对象为一家名为DoggoGo的虚构公司构建一个自定义API。亚博

完整的Doggos API源代码和API文档可在GitHub

请注意: 亚博Zendesk提供本文仅用于教学目的。亚博Zendesk不为这些内容提供支持。如有问题,请在亚博Zendesk api社区,或在网上寻找解决方案。

DoggoGo需求

第一步是研究需求。DoggoGo.com (Doggos On the Go!)是一个步行共享服务,为宠物主人提供按需和预定的遛狗服务。客户可以通过移动设备或网络浏览器上的DoggoGo应用程序要求遛狗。遛狗者使用手机应用程序接受和安排遛狗。

DoggoGo使用Zend亚博esk Support为宠物主人提供客户服务。DoggoGo客户服务团队希望他们的代理商能获得每个宠物主人的狗的以下额外信息:

  • 的名字
  • 品种
  • 生日
  • 如果有医疗状况的话

当宠物主人报告问题时,这些信息将帮助代理商提供更好的客户服务。

此外,遛狗者还要求每只狗提供以下信息:

  • 服从训练(是或否)
  • 气质(冷静、自信、精力充沛、积极进取、电视迷)
  • 对陌生人的态度(深情、含蓄、恐惧)

您建议使用自定义对象为公司创建Doggos API。该API将允许该公司创建、更新和检索关于每个宠物主人的狗的数据。然后,该公司可以使用Doggos API完成以下任务:

  • 从DoggoGo应用程序收集宠物主人的狗信息
  • 通过DoggoGo移动应用程序向遛狗者提供狗狗信息
  • 通过Zendesk支持帐户中的Zendesk应用程序向客户服务代理提供每个宠物主人的狗的信息亚博

系统设置

如果您只是想跟随本教程学习,而不想自己构建定制API,可以跳过本节。完整的Doggos API源代码和文档可以在GitHub

如果你想构建自定义API,你需要以下内容:

  1. 亚博Zendesk支持

    您需要在Zendesk Suite计划中访问Ze亚博ndesk Support帐户。你可以获得一个15天的免费试用账户。如果您有兴趣成为Zendesk开发人员合作伙伴,您可以将您的试用帐户转亚博换为赞助Zendesk支亚博持帐户

    您还需要帐户中的代理或管理权限来使用自定义对象API。

  2. 帐户中已启用自定义对象

    自定义对象必须由管理员在Zendesk Support中启用。亚博如果您不是管理员,请管理员为您启用它们。要启用自定义对象,首先单击Zendesk产品图标(亚博),然后在弹出框的下方选择“管理中心”。在Admin Center主页上,单击Sunshine图标()。最后,在自定义对象和关系页面上单击激活自定义对象

  3. Python 3.6或更高版本

    自定义API是使用Python 3.6或更高版本构建的。要安装最新版本,请参见http://www.python.org/download/

  4. 请求图书馆

    下载及安装请求图书馆如果你还没有Python的话。Requests库简化了在Python中进行HTTP请求。要安装它,在Mac的终端或Windows的命令提示符中执行以下命令:

                   
    $ pip3安装请求
  5. 瓶子的框架

    Bottle是一个使用Python构建web应用程序的极简web框架。在本教程中,您将使用它来构建和测试Doggos API端点。Bottle包含一个内置的开发服务器,您可以使用它在本地测试更改。使用实例安装Bottle。

                   
    $ pip3安装瓶子

任务

DoggoGo项目由以下任务组成:

  1. 定义一个名为doggo的自定义对象类型来表示宠物主人的狗。您将使用doggo对象类型创建狗的记录。

  2. 在Zendesk用户记录和doggo记录之间创建一对多的关系。亚博一个宠物主人可能有不止一只狗。

  3. 构建一个API来创建、检索和更新狗狗记录。

  4. 为DoggoGo开发人员编制新的API文档。

定义doggo对象类型

您可以使用自定义对象API定义一个新的狗狗对象类型,然后根据新的对象类型创建狗狗记录。

在最基本的情况下,对象类型由关键和JSON模式这描述了数据。键是要用于标识对象类型的名称。

根据项目需求,每只狗都表示为一个具有以下属性的对象:

的名字 类型 强制性的 评论
的名字 字符串 是的 狗的名字
品种 字符串 没有 狗的品种
生日 字符串 没有 以YYYY-MM-DD格式表示的已知或估计生日
条件 字符串 没有 如果有医疗状况的话
培训 布尔 没有 狗狗是否接受了服从训练
气质 字符串 没有 自然的倾向。可能值:“冷静”,“自信”,“精力充沛”,“积极进取”,“电视迷”
陌生人 字符串 没有 对待陌生人的态度。可能值:“深情的”,“含蓄的”,“恐惧的”

这些细节组成了您的模式。注意,模式不包含任何关于特定狗的信息。它只是描述了这个信息。

要创建对象类型,向以下端点发出POST请求:

POST / api /阳光/对象/类型

详细信息请参见创建对象类型在API文档中。

自己试试吧

  1. 在您的用户路径中创建一个项目文件夹。

    例子:

    美元jdoe /项目/ doggogo

    避免在谷歌Drive或Microsoft OneDrive等共享网络路径下创建文件夹。Python解释器可能难以在这些路径中找到模块。

  2. 使用您最喜欢的代码编辑器创建一个名为亚博zendesk.py在项目文件夹中。

    该文件将充当API应用程序的Python模块。它会把所有的Zendesk代码合并到一个地方。亚博

  3. 将以下代码粘贴到文件中:

                   
    进口请求凭证“your_亚博zendesk_email”“your_亚博zendesk_password”亚博“https://your_subdomain.亚博zendesk.com”defcreate_object_type关键模式数据“数据”“关键”关键“模式”模式urlf”{亚博zendesk} / api /阳光/对象/类型”“内容类型”“application / json”“接受”“application / json”响应请求帖子urljson数据身份验证凭证如果响应status_code! =201打印f创建{key}对象类型失败,错误为{response. 'status_code}: {response.text}返回返回响应json“数据”

    create_object_type ()函数接受一个键和一个模式(定义在下面),并向api /阳光/对象/类型端点。

  4. 中的占位符替换凭证而且亚博变量与你的信息。

    亚博变量标识Zendesk Support实例。亚博将占位符值替换为您自己的。例子:

    亚博Zendesk = 'https://mondodev.zendesk.com'

    一定要包括https://在url中。

    凭证变量指定您的Zendesk支持登录电子邮件和密码亚博。将_your\_zendesk_ema亚博il_和_your\_zendesk_password_占位符替换为实际值。例子:

    Credentials = '(电子邮件保护)”、“3 w00awning56”

  5. 创建一个名为create_doggo_type.py在项目文件夹中。

  6. 将以下代码粘贴到create_doggo_type.py文件:

                   
    进口json进口亚博关键“一动也不动地”模式“属性”“名字”“类型”“字符串”“描述”“狗的名字”“品种”“类型”“字符串”“描述”“犬”“生日”“类型”“字符串”“描述”以YYYY-MM-DD格式表示的已知或估计生日。例如:“2015-04-16”“条件”“类型”“字符串”“描述”“如有健康状况”“培训”“类型”“布尔”“描述”“狗狗是否接受过服从训练”“气质”“类型”“字符串”“描述”“天然倾向”“枚举”“冷静”“自信”“精力充沛”“咄咄逼人”“沙发土豆”“陌生人”“类型”“字符串”“描述”“对待陌生人的态度”“枚举”“深情”“保留”“害怕”“要求”“名字”响应阳光create_object_type关键模式如果响应打印f成功创建{key}对象类型。打印json转储响应缩进2sort_keys真正的+' \ n '

    一次性脚本提供了一个模式来定义doggo对象类型。对象类型的模式基于JSON模式。要了解更多信息,请参见为自定义对象创建模式

    模式验证所提交的值。例如,'enum'属性将属性的可能值限制为指定的字符串列表。如果提交了不同的值,Zendesk将返回422不可处理实体状态。亚博

    脚本导入亚博模块,并将键和模式传递给模块create_object_type ()功能:

                   
    响应亚博create_object_type关键模式
  7. 保存两个文件。

  8. 在命令行界面中,导航到项目文件夹(包含亚博zendesk.py而且create_doggo_type.py),然后执行以下命令:

                   
    $ python3 create_doggo_typepy

    如果成功,控制台应该显示doggo类型。

定义宠物主人和狗之间的关系

下一步是在Zendesk用户记录和doggo记录之间创建一对多的关系。亚博这是一种一对多的关系,因为一个宠物主人可能有不止一只狗。

在您的项目需求中,每只狗的宠物主人都由一个Zendesk用户对象表示。亚博您可以使用搜索用户支持API中的端点来查找用户。

请注意:在未来的迭代中,您计划使用概要文件的API追踪宠物主人。概要文件包含一个或多个系统中某人的一个或多个标识符,以及关于此人的可选自定义属性。

对于自定义对象,关系类型由关键,一个,以及目标.键是要赋予关系类型的名称。源是对象类型的名称;目标是相关对象类型的名称。任何一种对象类型都可以是自定义对象类型,如“doggo”,也可以是原生Zendesk对象类型,如“zen:user”或“zen:ticket”。亚博看到亚博Zendesk对象类型在API文档中。

例子:

             
“关键”“owner_has_many_doggos”“源”“战:用户”“目标”“一动也不动地”

“doggo”周围的方括号表示很多。该示例在Zendesk用户记录和doggo记录之间建立了一对多的关系。亚博

要创建关系类型,向以下端点发出POST请求:

POST / api /阳光/ /类型的关系

详细信息请参见创建关系类型在API文档中。

自己试试吧

  1. 添加以下内容create_relationship_type ()发挥你的作用亚博zendesk.py模块:

                   
    defcreate_relationship_type关键目标数据“数据”“关键”关键“源”“目标”目标urlf”{亚博zendesk} /类型/ api /阳光/关系“内容类型”“application / json”“接受”“application / json”响应请求帖子urljson数据身份验证凭证如果响应status_code! =201打印f\n创建{key}关系类型失败,错误{响应。status_code}: {response.text}”返回返回响应json“数据”

    create_relationship_type ()函数接受一个键、一个源对象类型和一个目标对象类型,然后向/ api /阳光/关系类型端点。

  2. 创建一个名为create_owner_doggo_type.py在项目文件夹中。

  3. 将以下代码粘贴到文件中:

                   
    进口json进口亚博关键“owner_has_many_doggos”“战:用户”目标“一动也不动地”响应亚博create_relationship_type关键目标如果响应打印f成功创建{key}关系类型。打印json转储响应缩进2sort_keys真正的+' \ n '

    这个一次性脚本提供数据来定义Zendesk用户和doggo记录之间的关系类型。亚博它导入您创建的sunshine模块并运行该模块的create_relationship_type ()功能:

                   
    响应亚博create_relationship_type关键目标
  4. 保存文件。

  5. 在命令行界面中执行如下命令:

                   
    $ python3 create_owner_doggo_typepy

    如果成功,控制台应该显示新的关系类型。

    请注意:关系类型创建后不能修改。您需要删除它并创建另一个。看到关系类型在API文档中。

创建Doggos API

定义了一动也不动地对象类型和owner_has_many_doggos关系类型,你可以开始构建Doggos API。API将有端点来创建、读取或更新doggo记录。DoggoGo开发团队将使用该API为公司的web和移动应用程序以及Zendesk Support中的代理界面提供新功能。亚博

为了简单起见,本教程中的API是使用,一个极简的Python web框架。要了解更多关于Bottle的工作原理,请参阅瓶文档.该框架包括一个本地web服务器,您可以使用它进行测试。

您将从设置应用程序开始,然后在接下来的部分中向其添加API端点。

自己试试吧

  1. 创建一个名为doggo_api.py在项目文件夹中。

  2. 将以下代码粘贴到文件中:

                   
    进口json进口亚博进口路线运行请求响应@路线/测试的def测验返回' < p > Hello World !< / p > "运行调试真正的

    路由定义了一个/测试url。

  3. 保存文件。

  4. 在您的命令行界面中,在Bottle的内置本地服务器上启动API应用程序:

                   
    $ python3 doggo_apipy

    启动后,Doggos API应用程序运行在http://localhost:8080

  5. 将以下url粘贴到浏览器中并按Enter。

                   
    http//本地主机8080/测验

    如果成功,浏览器将显示一行为“Hello World!”的页面。

构建Create Doggo端点

创建狗狗端点应该为指定的宠物主人创建一条狗狗记录。

创建狗狗记录时,还应该在新的狗狗记录和宠物主人的Zendesk用户记录之间创建一个关系记录。亚博中使用该关系中一动也不动地端点按宠物主人列出狗。

创建Doggo端点应该有以下API路径:

POST / api /一动也不动地

端点应该接受一个具有以下属性的JSON对象:

的名字 类型 强制性的 评论
pet_owner 整数 是的 亚博狗主人的Zendesk用户id
的名字 字符串 是的 狗的名字
品种 字符串 没有 狗的品种
生日 字符串 没有 以YYYY-MM-DD格式表示的已知或估计生日
条件 字符串 没有 如果有健康问题的话
培训 布尔 没有 狗狗是否接受了服从训练
气质 字符串 没有 自然的倾向。可能值:“冷静”,“自信”,“精力充沛”,“积极进取”,“电视迷”
陌生人 字符串 没有 对待陌生人的态度。可能值:“深情的”,“含蓄的”,“恐惧的”

自己试试吧

  1. 后粘贴以下路由/测试doggo_api.py文件:

                   
    @路线“/ api /一动也不动地”方法“职位”defadd_doggo#创建狗狗记录属性请求json得到“一动也不动地”obj_type“一动也不动地”pet_owner属性流行“pet_owner”#使用创造的关系如果“名字”属性响应状态400返回doggo_record亚博create_object_recordobj_type属性如果“error_code”doggo_record响应状态doggo_record“error_code”返回#创建关系记录rel_type“owner_has_many_doggos”pet_owner目标doggo_record“id”relationship_record亚博create_relationship_recordrel_type目标如果“error_code”relationship_record响应状态relationship_record“error_code”返回#发送一动也不动地记录响应响应状态201响应“内容类型”“application / json”返回json转储“记录”doggo_record

    这段代码中有很多活动。让我们一步一步来。

    路由用一个HTTP方法POST定义了API路径'/ API /doggos'。

    当API web应用程序接收到此请求时,它将运行add_doggo ()函数。该函数首先从请求体(属性= request.json.get('doggo')).它还指定了您想要使用这些属性创建的对象类型是'doggo'(您在定义doggo对象类型如上图所示)。

    函数弹出(或移动)'pet_owner'属性属性字典,因为doggo对象模式中不支持该属性。相反,该值稍后在函数中用于创建与doggo记录的关系。

    函数将对象类型和属性传递给create_object_record ()在zendesk模块中函数(在下一亚博步中定义)。它使用返回的狗狗记录id在宠物主人(源)和新的狗狗记录(目标)之间创建关系create_object_relationship ()函数(在此过程的下一个步骤中定义)。

  2. 添加以下内容create_object_record ()发挥你的作用亚博zendesk.py模块:

                   
    defcreate_object_recordobj_type属性数据“数据”“类型”obj_type“属性”属性urlf' 亚博{zendesk} / api /阳光/对象/记录”“内容类型”“application / json”“接受”“application / json”响应请求帖子urljson数据身份验证凭证如果响应status_code! =201返回“error_code”响应status_code返回响应json“数据”

    create_object_record ()函数接受对象类型和定义要创建的记录属性的字典。函数然后向对象发出POST请求api /阳光/对象/记录端点来创建对象记录。详细信息请参见创建对象记录在API文档中。

  3. 添加以下内容create_relationship_record ()发挥你的作用亚博zendesk.py模块:

                   
    defcreate_relationship_recordrel_type目标数据“数据”“relationship_type”rel_type“源”f“战:用户:{来源}”“目标”目标urlf' 亚博{zendesk} / api /阳光/关系/记录”“内容类型”“application / json”“接受”“application / json”响应请求帖子urljson数据身份验证凭证如果响应status_code! =201返回“error_code”响应status_code返回响应json“数据”

    create_relationship_record ()函数接受一个关系类型、一个源记录id和一个目标记录id。因为源是一个本地Zendesk用户记录,所以源记录id被修改为亚博正确的格式(f 'zen:用户:{来源}’).函数然后向对象发出POST请求记录/ api /阳光的关系端点来创建关系记录。详细信息请参见创建关系记录在API文档中。

  4. 保存文件。

  5. 在您的命令行界面中,启动或重新启动Bottle内置本地服务器上的API:

                   
    $ python3 doggo_apipy

    如果本地Bottle服务器已经在运行,请确保先将其关闭。更改时,应始终重新启动本地服务器doggo_api.py当服务器运行时。新闻控制+ C命令,停止服务器。

  6. 打开一个单独的命令行窗口,运行下面的API请求来创建一条狗狗记录:

                   
    旋度http//本地主机8080/api/一动也不动地\-d“{“狗狗”:{“宠物主人”:123456,“名字”:“加斯顿”,“生日”:“2016-02-09”,“条件”:“跳蚤”,“气质”:“精力充沛”,“陌生人”:“内敛”}}”-H“application / json内容类型:-v-X帖子

    不需要导航到项目文件夹——这是对本地服务器的HTTP请求。

    请确保将“pet_owner”id替换为Zendesk Support帐户中的实际用户id。亚博您可以为此目的创建一个测试用户。

    如果你喜欢,你可以用邮递员运行API请求:

    如果成功,Doggos API应该返回创建并存储在Zendesk Sunshine基础设施中的doggo记录。亚博

    邮差:

构建List Doggos端点

List Doggos端点应该返回指定宠物主人的一条或多条狗狗记录的数组。宠物主人由Zendesk用户记录表示。亚博

List Doggos端点应该有以下API路径:

GET / api /业主/ {user_id} /一动也不动地

端点应该指定一个Zendesk用户id。亚博

自己试试吧

  1. 将如下路由添加到doggo_api.py文件。

                   
    @路线' / api /业主/ < user_id > /一动也不动地deflist_doggosuser_iduser_idf“战:用户:{user_id}”rel_type“owner_has_many_doggos”一动也不动地亚博list_related_object_recordsuser_idrel_type如果“error_code”一动也不动地响应状态一动也不动地“error_code”返回响应“内容类型”“application / json”返回json转储“一动也不动地”一动也不动地

    路由包含< user_id >通配符,使路由动态。通配符值被传递给路由list_doggos (user_id)函数。因为用户id指的是Zendesk用户,所以函数将id格式化为(亚博f 'zen:用户:{user_id}).

    该函数指定API应该使用'owner_has_many_doggos'关系类型来获取狗狗记录。

    函数将用户id和关系类型传递给list_related_object_records ()在zendesk模块中函数(在下一亚博步中定义)。

    最后,该函数在HTTP响应中返回doggo记录数组。

  2. 添加以下内容list_related_object_records ()发挥你的作用亚博zendesk.py模块:

                   
    deflist_related_object_recordsrecord_idrel_typeurlf' 亚博{zendesk} / api /阳光/对象/记录/ {record_id} /相关/ {rel_type} '“接受”“application / json”响应请求得到url身份验证凭证如果响应status_code! =200返回“error_code”响应status_code返回响应json“数据”

    list_related_object_records ()函数接受一个记录id和一个关系类型,并将其传递给以下Zendesk端点:亚博

    GET / api /阳光/对象/记录/ {id} /相关/ {relationship_type}

    看到列表相关对象记录详见API文档。

    端点返回相关记录的数组。

  3. 保存文件。

  4. 在你的命令行界面中,重启本地服务器上的API:

                   
    $ python3 doggo_apipy

    如果本地服务器已经在运行,请确保首先通过按下将其关闭控制+ C

  5. 在一个单独的命令行窗口中,运行下面的API请求来列出宠物主人的狗:

                   
    旋度http//本地主机8080/api/主人/123456/一动也不动地-v

    将API路径中的用户id替换为在上一节中创建doggo记录时指定的Zendesk用户id。亚博

    如果成功,Doggos API应该返回一个包含doggo记录的数组。

    邮差:

构建Update Doggo端点

更新狗狗端点应该更新指定的狗狗记录并返回该记录。

它应该有以下API路径:

把/ api /一动也不动地/ {doggo_id}

端点应该指定一个狗狗记录id,并接受一个具有以下任何属性的JSON对象:

的名字 类型 评论
的名字 字符串 狗的名字
品种 字符串 狗的品种
生日 字符串 以YYYY-MM-DD格式表示的已知或估计生日
条件 字符串 如果有健康问题的话
培训 布尔 狗狗是否接受了服从训练
气质 字符串 自然的倾向。可能值:“冷静”,“自信”,“精力充沛”,“积极进取”,“电视迷”
陌生人 字符串 对待陌生人的态度。可能值:“深情的”,“含蓄的”,“恐惧的”

pet_owner属性没有包含,因为它不是doggo模式的一部分。

自己试试吧

  1. 将如下路由添加到doggo_api.py文件。

                   
    @路线' / api /一动也不动地/ < doggo_id >”方法“把”defupdate_doggodoggo_id属性请求json得到“一动也不动地”记录亚博update_object_recorddoggo_id属性如果“error_code”记录响应状态记录“error_code”返回响应状态200响应“内容类型”“application / json”返回json转储“记录”记录

    路由使用< doggo_id >通配符将值传递给update_doggo (doggo_id)函数。

    该函数从请求体(属性= request.json.get('doggo')).函数然后将doggo id和属性数据传递给update_object_record ()在zendesk模块中函数(在下一亚博步中定义)。

    最后,如果一切顺利,该函数将在HTTP响应中返回更新后的doggo记录。

  2. 添加以下内容update_object_record ()发挥你的作用亚博zendesk.py模块:

                   
    defupdate_object_recordrecord_id属性urlf”{亚博zendesk} / api /阳光/对象/记录/ {record_id}’数据“数据”“属性”属性“内容类型”“application / json merge-patch +”“接受”“application / json”响应请求补丁urljson数据身份验证凭证如果响应status_code! =200返回“error_code”响应status_code返回响应json“数据”

    update_object_record ()函数接受记录id和要更新的属性,并将其传递给以下Zendesk端点:亚博

    补丁/ api /阳光/对象/记录/ {record_id}

    该请求是PATCH请求。你必须附上“内容类型”:“application / json merge-patch +”头。看到更新对象记录详见API文档。

  3. 保存文件。

  4. 在你的命令行界面中,重启本地服务器上的API:

                   
    $ python3 doggo_apipy

    如果本地服务器已经在运行,请确保首先通过按下将其关闭控制+ C

  5. 在一个单独的命令行窗口中,运行以下API请求来更新doggo记录:

                   
    旋度http//本地主机8080/api/一动也不动地/4f1f0cd4-5653-11 e9-90b0-37a64660d256-d”{一动也不动地”:{“生日”:“2016-03-19”,“条件”:“‘髋关节发育不全’”}}”-H“application / json内容类型:-v-X

    将API路径中的狗狗id替换为上一节中List Doggos端点返回的狗狗id。

    如果成功,Doggos API应该返回更新后的doggo记录。

    旋度:

    邮差:

编写Doggos API文档

在DoggoGo开发人员开始使用它之前,需要对Doggos API进行文档化。文档的可能版本可在DoggoGo API回购在GitHub上。

下一个步骤

显然,下一步是为Doggo API构建一个DELETE端点。然而,DoggoGo并不认为有这种需求,因为它想要保存与每个宠物主人相关的狗狗记录。如果狗狗去世了,公司会在得知消息和一周年纪念日时,向狗主人发送“他是一个好孩子”或“她是一个好女孩”等慰问信。这些信息也有助于遛狗者与拥有多只宠物的主人建立客户关系。

公司的要求不是删除狗狗记录,而是用一个字段表示狗狗的死亡日期和一个字段表示狗狗的性别(用于哀悼消息)来更新狗狗对象的模式。

经过进一步讨论,DoggoGo公司决定,它还希望遛狗者在每次遛狗后在手机应用程序中输入1到5分,为遛狗者评分。每只狗的平均分对其他遛狗者和客服人员都很有用。他们想让你扩展Doggos API,使用一个具有以下属性的狗评级对象:

  • 一动也不动地id
  • 走评级
  • 关于步行的任何其他有用属性,比如一天中的时间或天气

要列出每只狗的评分并取平均值,还需要在狗和评分之间建立一对多的关系。

享受使用Zendesk自定义对象构建自己定制的api。亚博