jasir / raml-server
Requires
- alecsammon/php-raml-parser: ~1.1.0
- guzzlehttp/guzzle: ~6.0.0
- slim/extras: ~2.0.0
- slim/slim: ~2.0
- symfony/yaml: ~2.7.0
This package is not auto-updated.
Last update: 2024-09-14 19:31:08 UTC
README
#PHP RAML Server
从https://github.com/dethbird/PHP_RAML_Server分支
新特性
- 多个RAML可以在服务器上运行
- 正确设置BaseUri后,正确提供*.raml文件
- 轻松集成到现有网站和任何框架中
待定
- 重构调用真实实现,以消除扩展Controller的需求
- 重构授权
请查看服务器克隆和运行示例:...
与Nette框架集成 + 完全工作的API服务器:https://github.com/jasir/raml-server-nette-example
以下是包含笔记本示例的gist:https://gist.github.com/jasir/1305abdeec6e259abe1fbf9a0a5c58c4
原始文档在这里...
##概述
这是一个Apache/PHP服务器的实现,它接受一个RAML API规范,并使用Slim Microframework创建一个可工作的API服务器。
开发者实现了指定的API方法。在执行这些自定义方法之前,会验证必需的查询参数、头部和正文元素,如果出错,则返回400 Bad Request
。它还具有请求RAML中定义的响应示例和模式的方式,如下文使用部分所述。
##要求
运行PHP 5.5+的Web服务器。您可以按照这些说明启动一个免费的Amazon EC2,包括mysql持久化层,用于实际方法实现。
##设置
####确保/public是主机的docroot
# Run composer in project root
composer install
####配置
# in project root
mv configs/configs.example.yml configs/configs.yml
##更改API
####RAML规范RAML API定义位于somedir/{version}/{api_name}.raml
{version}
由API中的版本号确定,例如在http://fake-api.com/v1.1/pizza中,版本是"v1.1"{api_name}
来自配置,可以是类似"pizza_delivery_api"或"movie_quote_reference_api"的东西。基本上,通过更改此值,您是在告诉RAML服务器它应该假定哪种API个性。
注意:确保您定义的RAML文档具有与它所在的文件夹名称相同的版本号
#%RAML 0.8 title: Pizza Delivery API version: v1.0 #be mindful that this matches the folder where it resides
####方法定义方法定义位于用户生成的类中,位于/methods/{version}{api_name|UnderscoreToUcwords}.php
。
示例:
pizza_delivery_api
会映射到/methods/{version}/PizzaDeliveryApi.php
。
这些类必须扩展MethodsBase()
。它们包含直接映射到请求的方法。
<?php class ExampleApi extends MethodsBase { public function getExample() { $this->response->setStatus(501); } }
类方法使用HTTP类型和请求路径进行映射
示例:路由
GET /v1.0/pizza/deliveries
会映射到名为getPizzaDeliveries()
的方法,而POST /v1.0/article/comments
会映射到postArticleComments()
作为一个一般规则,在创建这些时,您应该将响应状态设置为501
以指示尚未实现
public function postArticleComments () { $this->response->setStatus(501); }
在此阶段,实现取决于您。您可以在其他语言中启动一个进程,例如Python,甚至调用完全不同的服务!这是一个真正的魔法世界。
##调用API!
####基本用法 假设您的Web服务器正在运行,我们现在可以访问我们假设的API的端点。我们可以使用像Postman这样的工具来发送这些请求。您也可以直接使用命令行curl
。
所需的查询参数、头信息和正文架构将被尊重,所有格式错误的请求都将返回HTTP 400 Bad Request
。
cURL
以下是curl中针对POST /correction的一些示例调用
# 201 example curl -X POST -H "X-Http-Example: 201" http://54.148.30.160/v1.0/correction # 201 schema curl -X POST -H "X-Http-Example: 201" -H "X-Http-Schema: 1" http://54.148.30.160/v1.0/correction # missing release id required query param curl -X POST -H "User-Id: 1234" -H "Vendor-Id: 5678" http://54.148.30.160/v1.0/correction # successful post (501 not implemented) curl -X POST -H "User-Id: 1234" -H "Vendor-Id: 5678" http://54.148.30.160/v1.0/correction?release_id=9988776
####获取响应示例和架构
存在两个保留的HTTP头,用于绕过验证并仅返回RAML中定义的示例和架构。每个响应代码200、201、202的示例和架构都是逐个请求的。
X-Http-Example
:HTTP状态码(200、201、202等)
X-Http-Schema
:1|null - 如果设置此标志,它将返回请求的X-Http-Example HTTP代码的架构。