干货!手把手教你写 SDK !
237

唠在前面

文章篇幅较长,请在阅读前确保当前状态比较心平气和,耐心阅读

高级教程看这里 揭开 Foundation SDK 的神秘面纱

本人 SDK 写过不少,有些还没有推广只是出于公司自用的状态,也总结了不少经验,这次准备写个美团配送的 SDK,想着不如就把开发过程写成文章吧!

首先要了解一个精华包 https://github.com/hanson/foundation-sdk ,有多精华?本人所有的 SDK 只需要依赖这一个包,足矣。

此包含括容器、日志、请求、配置、token 等基础类,这里并不打算细讲,到时另开文章细讲。

开发准备

先来看看此次教程要开发的美团配送文档 http://page.peisong.meituan.com/open/doc#section1-1

一般我会首先给 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.overloading.php#object.call
不多讲,跳过
最终效果写成这样
file

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

API & 签名

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

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

根据要求写加密函数,有同学发现这里的构造函数是怎么传进去的,只需改改 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 于 3个月前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 16

上来就是一个 :+1:

3个月前
select_and_action

基本是收藏。。。。@cocoyo

3个月前

👍厉害

3个月前
96qbhy

稳如狗!

3个月前

圈star 大佬

3个月前

太厉害

3个月前

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

3个月前

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

2个月前
overtrue

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

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

2个月前
Athena

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

2个月前
Hanson

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

2个月前

用phpstorm 好评!

1个月前

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

1个月前

收藏一个:+1:

1个月前

楼主好6

3周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!