背景:
先介绍一下shopify-sdk,它使用java语言开发,是用来做shopify接口二次开发的。做过Shopify独立站的都知道,shopify店铺有管理后台去给管理员增删改查商品和订单等数据,这些数据其实都是可以通过shopify提供的Rest API进行查询的,甚至还可以通过这些接口把商品数据同步给shopify后台。我之前就有同步shopify后台数据到本地的诉求,开搞之前当然是先找官方有没有趁手的客户端SDK可供集成啦。
踩坑过程:
但是我发现shopify官方提供的客户端SDK只有node.js、PHP和Python写的,本人是java开发,我们后台是JAVA项目,官方也不支持啊!
直到我发现gayhub上别人写的这个java版SDK心情才豁然开朗了:
然后我就开启踩坑之路了,第一个坑是这个SDK竟然没发现通过集合获取商品列表或者是通过商品获取所在集合的方法,这里我科普一下,在Shopify后台中,运营人员会去录入商品信息,也会创建商品集合,比如创建一个叫做XX系列的集合,然后属于这个集合的商品会添加到集合中,所以集合与商品的关联关系是很重要的,但是我下载了SDK源码在master分支中竟然没发现这么重要的方法!
作为一个顽强的程序员,我没有放弃,然后我在项目的Pull Request中发现了惊喜:
这不就是我想要的方法吗!这种重要的功能咋不合进主干,看了下Conversation我无语了,原来是有代码冲突导致没合进去:
一方面我催着贡献者赶紧合,另一方面我决定不等了,直接把代码copy过来用,搞定!但是在我获取商品的Metafields(保存商品名称等一些属性数据)数据时又吐血了,调用getProductMetaFields方法居然报错了,从shopify返回是200正常的,SDK封装结果数据的步骤报错了,于是赶紧提了issue:
最后还是自己debug发现了原因,Metafield数据会返回一个type表示数据的结构,SDK通过这个type确定使用什么结构方式去封装数据,SDK定义了一个类型枚举类,只有在这个枚举类中的type才能成功获取到,针对json类数据SDK定义的枚举值是“json”,shopify官方的Rest API文档其实也是写的“json,可实际上shopify返回的枚举值是"json_string",shopify官方文档估计没刷新,所以人家SDK开发者也没改,本地改正以后就OK了。