/** * Create a new Method from an array * * @param string $method * @param array $data * [ * body: ?array * headers: ?array * description: ?string * protocols: ?array * responses: ?array * queryParameters: ?array * ] * @param ApiDefinition $apiDefinition * * @throws \Exception * * @return Method */ public static function createFromArray($method, array $data = [], ApiDefinition $apiDefinition = null) { $method = new static($method, $apiDefinition); if (isset($data['body'])) { foreach ($data['body'] as $key => $bodyData) { if (in_array($key, WebFormBody::$validMediaTypes)) { $body = WebFormBody::createFromArray($key, $bodyData); } else { $body = Body::createFromArray($key, $bodyData); } $method->addBody($body); } } if (isset($data['headers'])) { foreach ($data['headers'] as $key => $header) { $method->addHeader(NamedParameter::createFromArray($key, $header)); } } if (isset($data['description'])) { $method->setDescription($data['description']); } if (isset($data['baseUriParameters'])) { foreach ($data['baseUriParameters'] as $key => $baseUriParameter) { $method->addBaseUriParameter(BaseUriParameter::createFromArray($key, $baseUriParameter)); } } if (isset($data['protocols'])) { foreach ($data['protocols'] as $protocol) { $method->addProtocol($protocol); } } if (isset($data['responses']) && is_array($data['responses'])) { foreach ($data['responses'] as $responseCode => $response) { $method->addResponse(Response::createFromArray($responseCode, $response ?: [])); } } if (isset($data['queryParameters'])) { foreach ($data['queryParameters'] as $key => $queryParameterData) { $method->addQueryParameter(NamedParameter::createFromArray($key, $queryParameterData)); } } if (isset($data['securedBy'])) { foreach ($data['securedBy'] as $key => $securedBy) { if ($securedBy) { $method->addSecurityScheme($apiDefinition->getSecurityScheme($securedBy)); } else { $method->addSecurityScheme(SecurityScheme::createFromArray('null', array(), $apiDefinition)); } } } return $method; }
/** * Create a Resource from an array * * @param string $uri * @param array $data * [ * uri: string * displayName: ?string * description: ?string * baseUriParameters: ?array * ] * * @param ApiDefinition $apiDefinition * @param Resource $parentResource * * @return Resource */ public static function createFromArray($uri, array $data = [], ApiDefinition $apiDefinition = null, Resource $parentResource = null) { $resource = new static($uri, $apiDefinition); if (isset($data['displayName'])) { $resource->setDisplayName($data['displayName']); } else { $resource->setDisplayName($uri); } if (isset($data['description'])) { $resource->setDescription($data['description']); } if (isset($data['baseUriParameters'])) { foreach ($data['baseUriParameters'] as $key => $baseUriParameter) { $resource->addBaseUriParameter(NamedParameter::createFromArray($key, $baseUriParameter)); } } if (isset($data['uriParameters'])) { foreach ($data['uriParameters'] as $key => $uriParameter) { $resource->addUriParameter(NamedParameter::createFromArray($key, $uriParameter ?: [])); } } if (null !== $parentResource) { foreach ($parentResource->getUriParameters() as $uriParameter) { $resource->addUriParameter($uriParameter); } } if (isset($data['securedBy'])) { foreach ($data['securedBy'] as $key => $securedBy) { if (null !== $securedBy && $apiDefinition->getSecurityScheme($securedBy) instanceof SecurityScheme) { $resource->addSecurityScheme($apiDefinition->getSecurityScheme($securedBy)); } else { $resource->addSecurityScheme(SecurityScheme::createFromArray('null', array(), $apiDefinition)); } } } foreach ($data as $key => $value) { if (count($resource->getSecuritySchemes()) > 0) { foreach ($resource->getSecuritySchemes() as $securityScheme) { if ($securityScheme instanceof SecurityScheme && 'null' !== $securityScheme->getKey()) { if (!isset($value['securedBy'])) { if (!is_array($value)) { $value = []; } $value['securedBy'][] = $securityScheme->getKey(); } } } } if (strpos($key, '/') === 0) { $resource->addResource(Resource::createFromArray($uri . $key, $value ?: [], $apiDefinition, $resource)); } elseif (in_array(strtoupper($key), Method::$validMethods)) { $resource->addMethod(Method::createFromArray($key, $value ?: [], $apiDefinition)); } } return $resource; }
/** * Create a new API Definition from an array * * @param string $title * @param array $data * [ * title: string * version: ?string * baseUrl: ?string * baseUriParameters: ?array * protocols: ?array * defaultMediaType: ?string * schemas: ?array * securitySchemes: ?array * documentation: ?array * /* * ] * * @return ApiDefinition */ public static function createFromArray($title, array $data = []) { $apiDefinition = new static($title); // -- if (isset($data['version'])) { $apiDefinition->setVersion($data['version']); } if (isset($data['baseUrl'])) { $apiDefinition->setBaseUrl($data['baseUrl']); } // support for RAML 0.8 if (isset($data['baseUri'])) { $apiDefinition->setBaseUrl($data['baseUri']); } if (isset($data['baseUriParameters'])) { foreach ($data['baseUriParameters'] as $key => $baseUriParameter) { $apiDefinition->addBaseUriParameter(BaseUriParameter::createFromArray($key, $baseUriParameter)); } } if (isset($data['mediaType'])) { $apiDefinition->setDefaultMediaType($data['mediaType']); } if (isset($data['protocols'])) { foreach ($data['protocols'] as $protocol) { $apiDefinition->addProtocol($protocol); } } if (isset($data['defaultMediaType'])) { $apiDefinition->setDefaultMediaType($data['defaultMediaType']); } if (isset($data['schemas'])) { foreach ($data['schemas'] as $name => $schema) { $apiDefinition->addSchemaCollection($name, $schema); } } if (isset($data['securitySchemes'])) { foreach ($data['securitySchemes'] as $name => $securityScheme) { $apiDefinition->addSecurityScheme(SecurityScheme::createFromArray($name, $securityScheme)); } } if (isset($data['securedBy'])) { foreach ($data['securedBy'] as $securedBy) { if ($securedBy) { $apiDefinition->addSecuredBy($apiDefinition->getSecurityScheme($securedBy)); } else { $apiDefinition->addSecuredBy(SecurityScheme::createFromArray('null', [], $apiDefinition)); } } } if (isset($data['documentation'])) { foreach ($data['documentation'] as $title => $documentation) { $apiDefinition->addDocumentation($title, $documentation); } } // --- foreach ($data as $resourceName => $resource) { // check if actually a resource if (strpos($resourceName, '/') === 0) { $apiDefinition->addResource(Resource::createFromArray($resourceName, $resource, $apiDefinition)); } } return $apiDefinition; }
/** * Create a Resource from an array * * @param string $uri * @param ApiDefinition $apiDefinition * @param array $data * [ * uri: string * displayName: ?string * description: ?string * baseUriParameters: ?array * ] * * @return self */ public static function createFromArray($uri, array $data = [], ApiDefinition $apiDefinition = null) { $resource = new static($uri, $apiDefinition); if (isset($data['displayName'])) { $resource->setDisplayName($data['displayName']); } else { $resource->setDisplayName($uri); } if (isset($data['description'])) { $resource->setDescription($data['description']); } if (isset($data['baseUriParameters'])) { foreach ($data['baseUriParameters'] as $key => $baseUriParameter) { $resource->addBaseUriParameter(BaseUriParameter::createFromArray($key, $baseUriParameter)); } } if (isset($data['uriParameters'])) { foreach ($data['uriParameters'] as $key => $uriParameter) { $resource->addUriParameter(NamedParameter::createFromArray($key, $uriParameter ?: [])); } } if (isset($data['securedBy'])) { foreach ($data['securedBy'] as $securedBy) { if ($securedBy) { $resource->addSecurityScheme($apiDefinition->getSecurityScheme($securedBy)); } else { $resource->addSecurityScheme(SecurityScheme::createFromArray('null', [], $apiDefinition)); } } } foreach ($data as $key => $value) { if (strpos($key, '/') === 0) { $resource->addResource(Resource::createFromArray($uri . $key, $value ?: [], $apiDefinition)); } elseif (in_array(strtoupper($key), Method::$validMethods)) { $resource->addMethod(Method::createFromArray($key, $value, $apiDefinition)); } } return $resource; }