APIIDA API Gateway Manager
Storage Formats
The Gateway Manager supports the storage of API definitions in different formats. The format defines how the service is stored and differs also in the way differences can be managed within the repository. There are two supported file formats: “GMU Single File” and “APIIDA Enhanced”. The following article explains the differences between those formats.
Please note that GMU Single File is primarily meant to read already existing repositories. Its use is highly discouraged, as it is not well suited for git-based storage. This format contains timestamps and version numbers, that change with every push to the repository, making it hard to track what actually changed. APIIDA’s Enhanced Format takes care of this by removing timestamps and version numbers before a push to a git repository.
APIIDA’s Enhanced Format also splits up the actual policies from configuration. This eliminates nested XML structures. Everything that is not a policy is also stored conveniently in JSON, so that automated processes are much easier to implement. On top of that JSON is a much better fit for git, as it maintains its validity in automatic merges most of the time, while XML tends to break.
GMU Single File
The GMU Single File format relates to the storage format used by the Layer7 Tool “Gateway Migration Utility”. The storage format is shown in the following image:
In this format, the service definitions are stored within a “Bundle.xml” file. For reference purposes, a seperate “folders.xml” file is added which stores the folder hirarchy of the service. An example for the content of the folders.xml file is shown below:
To get a more detailed description of the service definitions within the “bundle.xml”, please refer to the Restman Documentation on your Layer7 API Gateway.
APIIDA Enhanced
The “APIIDA Enhanced” format adds two folders to the described “GMU Single File” format above. A folder “policies” which contains one or more individual service definitions in XML as <l7:Service> objects. Additionally, a “conf” folder is added which contains several configuration descriptions in JSON. The format is shown below:
In this example, the content of the conf folder shows three files:
These JSON files contain descriptions of several resources used within one or multiple policies. The definition of “resource” used here follows the official Layer7 definition (review the Restman documentation for a complete list of resources).
Examples:
“Folder.json” contains a JSON object which defines the folder of the solution:
{
"folder": [
{
"folderId": "0000000000000000ffffffffffffec76",
"name": "Demo",
"id": "b56f10f3c04cd607eb080dce4b0426e5",
"version": 2
}
]
}
“PrivateKey.json” contains the definition of an encrypted private key and the corresponding certificate used within the services:
{
"privatekey": [
{
"alias": "SSL",
"keystoreId": "00000000000000000000000000000002",
"certificateChain": {
"certificateData": [
{
"issuerName": "CN%3D6d3095b61858",
"serialNumber": "3850365724295781246",
"subjectName": "CN%3D6d3095b61858",
"encoded": "MIIC8jCCAdqgAwIBAgIINW8\/OeP9W34wDQYJKoZIhvcNAQEMBQAwFzEVMBMGA1UEAxMMNmQzMDk1YjYxODU4MB4XDTE5MDcwNDA5MjgzM1oXDTI5MDcwMTA5MjgzM1owFzEVMBMGA1UEAxMMNmQzMDk1YjYxODU4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAozrf552zOGxS\/ncF36U8DVuQL1RjDusyWkqVPPuS4dG9tBpvyMm7RzfphetbOMVvB1LxHXhmW7WdSV3qgHBTRPPe4Yp+7zyNtuHUAVQ5geNDKd\/0AbRK5KmVld5Fd6cldZkSoSjII+A0j\/WncNQh1NCVuezUfVtrZn6LW9enI+6lRgA0Iae8tsoA5QHWGbwd25EKwl2JzI\/3eGH1cUO1ZPnQuroWKsw+\/klUXsJ+Mgb4ScdTP+32qKHyK7Dk4ROCYCXx5yF6PeuCoW0oMO6M07KsPGps83ZRrStusJ7lY8IxfkiGZnt3nkkc9VkFmd78fWo21fs9tSIQy7YUE6GMuQIDAQABo0IwQDAdBgNVHQ4EFgQU13Uj1Z62ksi59h2S9ZaNyhv+Tn8wHwYDVR0jBBgwFoAU13Uj1Z62ksi59h2S9ZaNyhv+Tn8wDQYJKoZIhvcNAQEMBQADggEBAIK4iZf1RwkT9IsAD8siIyGj52c6TOP+xkAeyASlJXUA1ZoRl8UvUl6zK4qLaJtIgUyUGZOHFJdOR45I\/NUcB6iQ1ZimReChao9vEA1wDZwJjkRXyrm+sxIhxdBUbBIlQ2o4teZOXadWyo6cxW9+iqf+YL+7ybahLmHvTcgQUPYmsPY8iH3NfvNBASgMj0W+Y61IBZifTYUSYTSnQZVKC2IMTVURZPv78LF4Yklx28VLpYoDcnEGumJ7+QWNhlGSDrjibD4ABDiTMDmEtwGZUT90G+MWaSZF0A0wjPPWK9BoCw3XjimHyF0Tf89JJZkbiLvK7t2GS5CQiq\/q\/YWSubQ="
}
]
},
"properties": {
"property": [
{
"key": "keyAlgorithm",
"stringValue": {
"value": "RSA"
}
},
{
"key": "keyData",
"stringValue": {
"value": "$L7C2$1,X7tYy\/bwua577cwHdHutiwl9K4RKA1YzTztv0ysTR1c=$oWq\/Y+5gHUTrmyZK2kBT5Wz66E5YWtUugeXSfGoKOAOybSclyPT9FZdTICpw++xzNeYmQr+dMURJgLbjCqYktLi81HhksWzKBNeAgC75BOxS+fX0a4TRwFu+8736JZI+qPSAJcaJqtvHa69+234A418CW+1BqrII1DQ5jQwPbW0STwCFEYLBUwHbPcVOq2aynUG3wHxUkgOJllF\/iRLuq5Ph93ElB1etwpB8uCvUVhkXuhEy7pf7Od9y6QFNDb0nRmZkFd77idByaFL3USDqdm3\/cKlwgEPMmwFwTBwNYjlX5j\/oNZlT4fkoSvlG+qefvj35U9lGpCIm12O\/aihVVUAxUpMRKHpG\/cxVjrT55i3L1mzSHnjXhC1FH7s0f9xuUAgpg+OD76ffljgFTymlXOu1UxsHXyv7KNHfTZa6eLHsGiZU5MtbLeHBhNFisz6+pVkSSFviKIGWeJsCn2oXHWGMH+pfjiAbTNHrmfKuKxJQrRAjDV9ijLzs1ulEJLp\/mgcVviWKyJ0fyxCt9iULPRr5axPIdQL5J6w518cE5xtE26bpqqseJaqHPqwQrGUZl6Q21+V1j1lfXF5Sx\/B7loBlMk3WESTO\/FyO663EB4\/WtmoD\/2A\/Xcff0TTejG2iO0wxUgTbrDQ5XW4Klid0SYyTmxrpe\/AlTrVxOF41o6KBaSz6XMkojr14xZkEoWDs1OUjrTUenXqE76NkIvZeBwkrsye26G2SZNy1bJwc4WhsmZbdPMjSyD+QBRAL52xpU8Z+tA\/PlBH4kvizRgxDZlV47z1OeW86aHfvqh3Np78FFJXcEm6uey5ncVUlhcau9DIlPaWmPvofU5w1KLizgxcVeIR2h5cFPj8gCYIksWhDONHTd9W8InePnmjIw29Yhg2wBcDWdxEflWj9rucltH\/Ww6bNlpeC51SqVp8YCcrnt88Uj5Wz0z0p9WwoKKWCcnud5n0uEJrViHthEHMCFybex0IkvnMr9qI33+9kusyQhs3jRkcJb+IyqsRqrBpf5opHjIIK1PxaBYsVm9eGwwyxPzxaZ3xc10KEgOexu9h25Ccffw4zLOdvakYz5IC3lI7ZsTFZv9xro7S8w7amVwyr+MReORO6Q\/rOA7xqLq3ovWPfKoZNQ\/eL\/fzZ\/kA5z9Nl1ndwA7UP0KKycx9wlwoxxkwB9iPp3UGyE8QV3UMHKb4qGZeDYQmn4XJmsvsQX+t0IKexo\/wjHbVn4nKumer2INQ6GA\/Puj8AcNzI+pTcMYi\/Uv932sSr8WkKrPPt2ZWwlWxzAP2YtD626fhAETqY6ZPxbQ+eoTJxoTx06lbkjSiYz0ONajv8nWNbLYnDGXFrzTEkMkyC2HqthZYx899WescyPN\/QrzC29biAw1\/iRjecS2ul\/1nfWOLo4M3LDaVXu4kaV10GPkcgjlgakx+nbB7j2r1ivrb0l7\/QhjUpdAAOlh1WMFVO93GdtrtrXRCbJXTVB2c62bqDYBs3bZyLdPtWKy7ofpgL6idMTebdhY+zV0caRzRMKZuYUUhUnnc539oj6P4a1yKnOWKSsMSeiYLMt1\/c6XBvtM5djhkASaQqwez9Vx\/rEeHdAvbAnjwAF1M8wrExSn3QZiYOVO8TagDpEjQMU0dQ9TiHSWYz7+OJJuiNuuRmkOOF4SB6OB1MuQS6PnoK2Lh1DWMQ4TUNfkyxlRAlGp2a9teMFGo=",
"bundleKey": "$L7C2$1bead,519aYRZKLTt71Mc96vNRtbvijxCHLgjuhNtM9pShwKE=$HWMVeY4zf2HYVgwVU1oGy18XcztMNsHPeme5KgIBgO8QIpuzD9uFfDjfeI4ysDGfhqvr1ri9Y+hchP2wXNt5veaWD\/O9dkk6p6cgpEbN+k2HA4sglp1IF05OYAMJQLmt",
"algorithm": "RSA"
}
},
{
"key": "specialPurposes",
"stringValue": {
"value": "Demo Key"
}
}
]
},
"id": "00000000000000000000000000000002:SSL"
}
]
}