Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Openapi Data Mocker

Latest Stable VersionBuild StatusCoverage StatusLicense

Openapi Data Mocker helps to generate fake data from OpenAPI 3.0 documents. Most of the methods may work with 2.0 version(fka Swagger 2.0), but it's not tested. This package was an enhancement of PHP Slim4 server in OpenAPI Generator project, but it easier to maintain it in separated repo.

Requirements

  • PHP ^7.3

Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.

Installation via Composer

Run in terminal:

composer require ybelenko/openapi-data-mocker

Usage example

Imagine we have OpenAPI Specification 3.0.3 - Schema Object like this:

description: Real world example schematype: objectproperties:
id:
type: integerformat: int32minimum: 1purchased_items:
type: arrayitems:
type: objectproperties:
SKU:
type: stringformat: uuidmaxLength: 20quantity:
type: integerformat: int32minimum: 1maximum: 5price:
type: objectproperties:
currency:
type: stringminLength: 3maxLength: 3enum:
- USD
- EUR
- RUBvalue:
type: numberformat: floatminimum: 0.01maximum: 99.99manufacturer:
type: objectproperties:
name:
type: stringmaxLength: 30country:
type: stringenum:
- CHN
- USA
- RUSbuyer:
type: objectproperties:
first_name:
type: stringminLength: 3maxLength: 15last_name:
type: stringminLength: 3maxLength: 15credit_card:
type: integerminimum: 1000000000000000maximum: 10000000000000000phone:
type: integerminimum: 10000000000000maximum: 99999999999999email:
type: stringformat: emailstatus:
type: stringenum:
- registered
- paid
- shipped
- delivereddefault: registeredcreated_at:
type: stringformat: date-time

Notice! While schema object presented in YAML format this library doesn't support YAML or JSON parsing right now. It means that mockSchemaObject method expects already decoded JSON value as argument.

When we mock mentioned schema with mockSchemaObject method:

require__DIR__ . '/vendor/autoload.php';
useOpenAPIServer\Mock\OpenApiDataMockerasMocker;
$mocker = newMocker();
// set model classes namespace for $ref handling// current example doesn't use $refs in schemas, however$mocker->setModelsNamespace('JohnDoesPackage\\Model\\');
// class InvoiceTest contains schema mentioned previously// it returns that schema with getOpenApiSchema() method declared in OpenAPIServer\Mock\BaseModel parent class$schema = \OpenAPIServer\Mock\Model\InvoiceTest::getOpenApiSchema();
$data = $mocker->mockSchemaObject($schema);
echojson_encode($data, \JSON_PRETTY_PRINT);

the output looks like:

{
"id": 1912777939,
"purchased_items": [
{
"SKU": "5ee78cfde9f05",
"quantity": 4,
"price": {
"currency": "EUR",
"value": 57.635
},
"manufacturer": {
"name": "Lorem i",
"country": "USA"
}
}
],
"buyer": {
"first_name": "Lorem ipsum do",
"last_name": "Lorem ipsum ",
"credit_card": 2455087473915908,
"phone": 65526260517693,
"email": "jfkennedy@example.com"
},
"status": "delivered",
"created_at": "1978-08-08T04:03:09+00:00"
}

Of course that output will be slightly different on every call. That's what mocker package has been developed for.

You can check extended example at examples/extended_example.php.

Supported features

All data types supported except specific string formats: email, uuid, password which are poorly implemented.

Data Types Support

Data TypeData FormatSupported
integerint32
integerint64
numberfloat
numberdouble
stringbyte
stringbinary
boolean
stringdate
stringdate-time
stringpassword
stringemail
stringuuid

Data Options Support

Data TypeOptionSupported
stringminLength
stringmaxLength
stringenum
stringpattern
integerminimum
integermaximum
integerexclusiveMinimum
integerexclusiveMaximum
numberminimum
numbermaximum
numberexclusiveMinimum
numberexclusiveMaximum
arrayitems
arrayadditionalItems
arrayminItems
arraymaxItems
arrayuniqueItems
objectproperties
objectmaxProperties
objectminProperties
objectpatternProperties
objectadditionalProperties
objectrequired
*$ref
*allOf
*anyOf
*oneOf
*not

Known Limitations

Avoid circular refs in your schema. Schema below can cause infinite loop and Out of Memory PHP error:

# ModelA has reference to ModelB while ModelB has reference to ModelA.# Mock server will produce huge nested JSON example and ended with `Out of Memory` error.definitions:
ModelA:
type: objectproperties:
model_b:
$ref: '#/definitions/ModelB'ModelB:
type: arrayitems:
$ref: '#/definitions/ModelA'

Don't ref scalar types, because generator will not produce models which mock server can find. So schema below will cause error:

# generated build contains only `OuterComposite` model class which referenced to not existed `OuterNumber`, `OuterString`, `OuterBoolean` classes# mock server cannot mock `OuterComposite` model and throws exceptiondefinitions:
OuterComposite:
type: objectproperties:
my_number:
$ref: '#/definitions/OuterNumber'my_string:
$ref: '#/definitions/OuterString'my_boolean:
$ref: '#/definitions/OuterBoolean'OuterNumber:
type: numberOuterString:
type: stringOuterBoolean:
type: boolean

Links to mentioned technologies

About

Library that generates fake data from OpenAPI 3.0 Spec

Topics

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages