jasir/raml-server

此包的最新版本(v0.1-beta)没有可用的许可证信息。

v0.1-beta 2015-08-07 12:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:31:08 UTC


README

#PHP RAML Server

Build Status

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代码的架构。