干货!手把手教你写 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,但为了效果更好看,我们会把调用的类独立出来
file

站在开发者的角度

站在开发者的角度,这个很重要,毕竟你的用户就是开发者,你需要思考开发者用这个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
file
以及新建一个 Api.php 并继承 AbstractAPI, 这个 API 类是用于请求接口,签名的地方
file
新建 Order.php ,用于所有接口的调用,继承上面的 API 类,并写上刚刚的 createByShopr 方法
file

但是我们要 $dispatch->createByShop 调用 Order 里面的 createByShop,咋办?
这里我们可以看看 php.net 的魔术方法介绍 http://php.net/manual/zh/language.oop5.ove...
不多讲,跳过
最终效果写成这样
file

因为方法不一定只有一个参数, ...$arguments 可以把参数原样传下去,写到这里就能通过 Dispatch 类调用 Order 的方法了,避免了过长的链式调用 $dispatch->order->createByShop()

API & 签名

这部分就是比较核心了,但大家也不需要去怕,一步一步还是挺简单的,我们先在 API 新建两个方法
request & signature

我们来看看这里是如何签名的 http://page.peisong.meituan.com/open/doc#s...

根据要求写加密函数,有同学发现这里的构造函数是怎么传进去的,只需改改 Dispatch 即可
file
file
file

再去写一下 request 方法
file

然后让 Order 调用 request 方法

file

到这里,其实已经OK了,把剩下的补完就好了。

优化

啥?还能优化?当然了!

异常处理

大家可以看到上面并没有做任何异常处理,这时我们可以增加一个 MeituanDispatchException

在 Api 加上 并且返回值调用一下这个方法
file

file

代码提示

因为用了魔术方法,调用时会出现没有提示的情况,在 Dispatch 上方加上注释即可

file

到这里教程就结束啦,如有疑问可以在下方留言或加Q群都可以

项目地址: https://github.com/cblink/meituan-dispatch

php吹水交流群 570769430

本帖由 Summer 于 1年前 加精
Hanson
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 16

没用上超哥的 package-builder ,差评!

https://github.com/overtrue/package-builde...

1年前 评论

基本是收藏。。。。@cocoyo

1年前 评论
yanrui

👍厉害

1年前 评论
qbhy

稳如狗!

1年前 评论

大神工作出真知啊! :+1:

1年前 评论

file
这里木有catch到,抛出的异常不是没什么用?

1年前 评论

没用上超哥的 package-builder ,差评!

https://github.com/overtrue/package-builde...

1年前 评论
GalaxyNo_1

字体不好看,差评! :smirk:

1年前 评论
Hanson

@mingyun 抛异常就是目的啊,要是自己catch的话就没必要抛异常了

1年前 评论

什么时候偷偷把 Meituan 存入字典的,开始还提示后来就不提示了

11个月前 评论

收藏一个:+1:

11个月前 评论

感谢楼主慷慨分享 :+1:

2周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!