justso/justapi

基于纯PHP的简单REST API。

3.1.0 2016-10-22 07:04 UTC

This package is not auto-updated.

Last update: 2024-09-22 06:57:29 UTC


README

基于纯PHP的简单REST API。

它作为一个前控制器工作,调用相应的服务类来处理请求的API调用。

安装

Composer

composer require justso/justapi

git

git clone git://github.com/JustsoSoftware/JustAPI.git vendor/justso/justapi

设置

在您的根目录中创建一个包含以下属性至少的 config.json 文件

  domain: FQDN of domain.
  packages: List of packages to be used by the PHP autoloader. They should be located directly under 'vendor'.
  services: List of services, having a pattern as key and a service locator as value.
  environments: List of environments your application is going to run in, e.g. 'production' or 'development'.

服务定位器是一个PHP类名或以关键字 'file:' 开头,表示匹配此模式的服务调用由位于 'vendor' 文件夹中的另一组服务处理。'file:' 后面的名称是服务的位置。

您指定的每个环境都应该包含至少一个 AppRoot,它是服务器上代码检出的本地路径,例如 '/var/www/'。此外,它还应指定应用程序和可选的API的URL。

以下是一个这样的 config.json 文件的完整示例

{
    "domain": "my-project.de",
    "packages": {
        "MyPackage": "/path/to/my/package"
    },
    "environments": {
        "production": {
            "approot": "/var/www/prod",
            "appurl":  "https://my-project.de",
            "apiurl":  "https://api.my-project.de",
            "apipprefix": "/"
        },
        "integration": {
            "approot": "/var/www/test",
            "appurl":  "https://test.my-project.de",
            "apiurl":  "https://test.my-project.de/api",
            "apipprefix": "/api/"
        },
        "autotest": {
            "approot": "/var/lib/jenkins/jobs/my-project/workspace",
            "appurl":  "https:///my-project",
            "apiurl":  "https:///my-project/api"
        },
        "development": {
            "approot": "/var/www/my-project",
            "appurl":  "http://local.my-project.de",
            "apiurl":  "http://local.my-project.de/api"
        }
    },
    "services": {
        "/api/myService":      "\\MyPackage\\MyService",
        "/api/otherService/*": "\\OtherPackage\\OtherService"
    }
}

如果使用Apache,您应该将其配置为

Alias /api /path/to/my/project/vendor/justso/justapi/FrontController.php

在NginX中,您可以使用重写

location /api/ {
    rewrite ^.*$ vendor/justso/justapi/FrontController.php;
}

这应该在子目录 '/api' 上调用服务时调用前控制器。您也可以在子域中使用JustAPI,例如 'api.example.com'。

自动加载器

JustAPI 包含一个PSR-0兼容的自动加载器。建议您也用于自定义类。您只需在 config.json 文件中的 'packages' 列表中指定它们的路径即可。

系统环境

JustAPI 中所有类的一个关键元素是 SystemEnvironment 类及其 SystemEnvironmentInterface。它是连接到所有操作系统功能的桥梁,包含有关安装、给定参数和文件系统的信息。

依赖注入容器

该包包含一个简单的依赖注入容器,可以在 /conf/dependencies.php 文件中进行配置。它应该只包含一个带有标识符的列表的 return 语句。将类名用作标识符是一个好习惯,尽管也可以使用其他名称。

如果您使用此约定并且只想创建新对象,则不需要为该对象定义。您可以通过调用 $object = $dic->get('\MyNameSpace\MyClassName'); 来实例化新对象。

可以将参数数组作为 get() 调用的第二个参数提供。如果您未指定任何参数,则至少使用依赖容器的 SystemEnvironment 作为构造函数的参数。

如果您想使一个类成为单例,请在 dependencies.php 文件中使用 singleton() 函数添加一个条目

return [
    '\MYNameSpace\MyClassName' => $this->singleton(MyNameSpace\MyClassName::class, [$this->env, 123])
];

这确保了每次调用 get() 都会返回相同的对象。该对象是在第一次对该对象调用 get() 时实例化的,并使用 SystemEnvironment 和构造函数参数的标量值 123

指定控制器类

为了实际处理API请求,您必须实现类并从 RestService 继承以处理这些请求,并在 config.json 中指定它们。因此,如果您的服务类 'My\Cool\RestService' 应该处理 '/api/my/service' 上的请求,您的 'services' 条目应如下所示

"my/service": "My\\Cool\\Service"

如果您的类应该处理像 '/api/my/service/77' 这样的调用,则条目可能包含一个通配符 (*)

"my/service/*": "My\\Cool\\Service"

所有与模式匹配的请求都交给服务类。您还可以在服务指定的中间使用通配符,例如

"my/service/*/subservice": "My\\Cool\\Service"

服务类可以实现以下一个或多个方法:

  • getAction
  • postAction
  • putAction
  • deleteAction

输出将被放置在 $this->environment 中,永远不会被打印或输出。

从版本 2 升级

如果您从版本 2 升级,您应该在您的 config.json 文件中更改一些内容。

  • 在版本 2 中,您只需要指定包名,以便自动加载器找到您的包。但这要求您的包位于 /vendor 中。这不再需要,但您需要指定包名及其位置作为 packages 中的键值对。
  • 路由 API 路径现在更加灵活,可以处理除 /api 之外的其他路径前缀。但您需要在您的服务规则中指定服务的完整路径。
  • 已删除函数 DependencyContainerInterface::newInstanceOf(),因此任何调用都应该替换为对 DependencyContainer 对象的 get() 调用。这会影响 DependencyContainer 本身以及实现此接口的 SystemEnvironment。

支持及其他

如果您需要支持,请与我们联系: http://justso.de