Php API使用库-如何构造composer包
一个简单的服务提供了一个API来使用它的一些特性。我想创建一个composer包,它将使用以下API,并且我希望它与其他PHP项目兼容。我读了关于这个主题的文章,并想出了使用Php API使用库-如何构造composer包,php,composer-php,Php,Composer Php,一个简单的服务提供了一个API来使用它的一些特性。我想创建一个composer包,它将使用以下API,并且我希望它与其他PHP项目兼容。我读了关于这个主题的文章,并想出了使用GuzzleHttp来发出请求的想法(我在其他几个库中看到过)。然而,我对API消费库的结构感到困惑。(这是一个RESTAPI) API提供了对两种资源的访问:客户和产品 产品资源有以下方法: 列出所有可用产品-获取 添加产品-发布 删除产品-删除 客户资源具有相同的方法 到目前为止,我所做的是以下结构(我按照建议遵循p
GuzzleHttp
来发出请求的想法(我在其他几个库中看到过)。然而,我对API消费库的结构感到困惑。(这是一个RESTAPI)
API提供了对两种资源的访问:客户
和产品
产品
资源有以下方法:
- 列出所有可用产品-获取
- 添加产品-发布
- 删除产品-删除
客户
资源具有相同的方法
到目前为止,我所做的是以下结构(我按照建议遵循psr-4):
src/MyName/PackageName
是我在关于创建composer软件包的教程中读到的结构MyName\PackageName
将通过它成为我的命名空间
php是一个类,它加载一些关于授权的配置(基本身份验证),并创建GuzzleHttp\Client
的新实例。另外,我有两种构建请求的方法(设置HTTP方法、URL和其他参数)。
我还有一个\u call()
方法,该方法实例化文件夹资源中的新对象,数组的第一个元素作为第二个参数传递,是应该调用的方法
文件夹Resources
包含两个文件Products.php
和Customers.php
,这两个文件是用于处理上述两个资源的所有方法的类。每个类都扩展了Client.php
文件夹Containers
包含用于处理来自每个资源的响应数据的文件
文件夹Exceptions
包含过程中可能抛出的自定义异常的类
这是一个易于维护的库的好方法,还是我遗漏了这里的一些概念
如何构造composer包
长话短说:坚持使用PSR-4,决定文件夹布局,并在composer.json文件的自动加载部分公开此布局。剩下的就是:选择清晰易懂的类和方法名来公开API
你的问题是不同事物的混合,有些事物相互重叠
当谈到项目的结构时,我们必须在源代码(面向对象设计)和文件夹布局(自动加载相关)以及composer集成(带有自动加载描述)之间进行划分
让我们按顺序看一下这个
a)源代码
然而,我对API消费库的结构感到困惑。
这是一个易于维护的库的好方法,还是我遗漏了这里的一些概念
问题是:我的代码是否足够清晰和精确(对我自己和其他人来说,例如在另一个项目中使用)
建议如下:
- 选择清晰的类和方法名称使使用变得更容易,如
Company\PhotoApi\Client.php
命名空间和类可能会公开供应商,例如生成源代码的个人或公司,然后可以包括API名称,最后是类名
- 遵循一些基本的OO原则
- 如何从API获取数据是基于味道的。使用Guzzle是可以的,而使用较轻的解决方案,如
文件\u获取内容
或卷曲
,可能也会奏效。视情况而定
- 关于可维护性:
- 文件数量越少,代码越不复杂,可维护性越好。你需要一个例外文件夹吗?有多少文件?为什么不坚持PHP的默认异常呢李>
<> LI>你也可以考虑,如果API改变,你的库必须改变,对吧?如果你的库发生了变化,那么使用你的库的项目中的所有代码都必须发生变化,对吗?如果API只公开了一小部分端点,那么最好只使用一个对象并为它们提供访问器方法,而不是使用多个对象作为访问器,这可能过于细粒度。这意味着使用API的项目在升级时(可能)会有更少的行更改。无论如何:如果您的API库太难使用,您的用户会告诉您
当你有类似于:
$PhotoApiProducts = new Company\PhotoApi\Products;
$products = $PhotoApiProducts->get();
这也是可能的:
$api = new Company\PhotoApi\Client;
$products = $api->getProducts();
$consumers = $api->getConsumers();
b)文件夹结构
我按照建议遵循psr-4
关于文件夹布局,我的建议是坚持使用PSR-4。
但是你必须自己决定确切的文件夹布局。您可以查看PSR-4标准的示例部分,以查看关于PSR-4的不同文件夹布局
c)作曲家集成
最后。。添加一个描述项目的composer.json
文件。
自动加载部分是最重要的部分,因为这是您向Composer公开项目结构的过程
当您决定在项目中使用PSR-4时,只需在自动加载部分中这样说,然后添加从名称空间到源的映射,如
"autoload": {
"psr-4": {
"Foo\\Bar\\": "src/Foo/Bar/"
}
}
现在,Composer项目的用户必须在引导过程中加载Composer autoloader,然后他可能开始使用您的库,只需使用其中的名称空间类名,然后autoloader就可以完成工作。您的问题很大。我很想为你写的每一段写一整篇文章,因为有太多的改进空间和你计划的很多不理想的东西。然而,大多数只是我的意见,这使得它不适合Stackoverflow。@Sven,can
"autoload": {
"psr-4": {
"Foo\\Bar\\": "src/Foo/Bar/"
}
}