干货!手把手教你写 SDK !
唠在前面
文章篇幅较长,请在阅读前确保当前状态比较心平气和,耐心阅读
高级教程看这里 揭开 Foundation SDK 的神秘面纱
本人 SDK 写过不少,有些还没有推广只是出于公司自用的状态,也总结了不少经验,这次准备写个美团配送的 SDK,想着不如就把开发过程写成文章吧!
首先要了解一个精华包 https://github.com/hanson/foundation-sdk ,有多精华?本人所有的 SDK 只需要依赖这一个包,足矣。
此包含括容器、日志、请求、配置、token 等基础类,这里并不打算细讲,到时另开文章细讲。
开发准备
先来看看此次教程要开发的美团配送文档 http://page.peisong.meituan.com/open/doc#s...
一般我会首先给 SDK 划分模块,用 easyWeChat 举例子就是 $wechat->server
$wechat->card
等等,那这里其实就只有一个 order
,那么我也没有什么必要去弄个容器了,毕竟只有一个。
我们来看 API 列表,其实也就这么几个 API,但为了效果更好看,我们会把调用的类独立出来
站在开发者的角度
站在开发者的角度
,这个很重要,毕竟你的用户就是开发者,你需要思考开发者用这个SDK这么写会比较爽。
用创建订单举例,我希望开发者的写法是这样子的:
<?php
$params = [];
$dispatch = new Dispatch($config);
$dispatch->createByShop($params);
一般来说,方法名可以参照 post 的 URL ,我们跟着就可以了。
开始开发
基础部分
mkdir meituan-dispatch
cd meituan-dispatch
composer init
// 自己改改composer配置,这里不教,有疑问留意或加群问
composer require hanson/foundation-sdk -vvv
mkdir src
// 所有文件放src里面
在新建 Dispatch.php 并继承 Foundation
以及新建一个 Api.php 并继承 AbstractAPI, 这个 API 类是用于请求接口,签名的地方
新建 Order.php ,用于所有接口的调用,继承上面的 API 类,并写上刚刚的 createByShopr
方法
但是我们要 $dispatch->createByShop
调用 Order
里面的 createByShop
,咋办?
这里我们可以看看 php.net 的魔术方法介绍 http://php.net/manual/zh/language.oop5.ove...
不多讲,跳过
最终效果写成这样
因为方法不一定只有一个参数, ...$arguments
可以把参数原样传下去,写到这里就能通过 Dispatch 类调用 Order 的方法了,避免了过长的链式调用 $dispatch->order->createByShop()
API & 签名
这部分就是比较核心了,但大家也不需要去怕,一步一步还是挺简单的,我们先在 API 新建两个方法request
& signature
我们来看看这里是如何签名的 http://page.peisong.meituan.com/open/doc#s...
根据要求写加密函数,有同学发现这里的构造函数是怎么传进去的,只需改改 Dispatch 即可
再去写一下 request 方法
然后让 Order 调用 request
方法
到这里,其实已经OK了,把剩下的补完就好了。
优化
啥?还能优化?当然了!
异常处理
大家可以看到上面并没有做任何异常处理,这时我们可以增加一个 MeituanDispatchException
在 Api 加上 并且返回值调用一下这个方法
代码提示
因为用了魔术方法,调用时会出现没有提示的情况,在 Dispatch 上方加上注释即可
到这里教程就结束啦,如有疑问可以在下方留言或加Q群都可以
项目地址: https://github.com/cblink/meituan-dispatch
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
没用上超哥的 package-builder ,差评!
上来就是一个 :+1:
基本是收藏。。。。@cocoyo
👍厉害
稳如狗!
圈star 大佬
太厉害
大神工作出真知啊! :+1:
这里木有catch到,抛出的异常不是没什么用?
没用上超哥的 package-builder ,差评!
字体不好看,差评! :smirk:
@mingyun 抛异常就是目的啊,要是自己catch的话就没必要抛异常了
用phpstorm 好评!
什么时候偷偷把
Meituan
存入字典的,开始还提示后来就不提示了收藏一个:+1:
楼主好6
感谢楼主慷慨分享 :+1:
感谢分享。 :+1:大赞
近期接到任务对接新的第三方接口,打算为第三方接口写个sdk,方便使用,真好缺乏思路