{
	"ServiceInfo": {
		"description": "This type represents the general information of a MEC service.",
		"type": "object",
		"required": [
			"serName",
			"version",
			"state",
			"transportInfo",
			"serializer"
		],
		"properties": {
			"serInstanceId": {
				"description": "Identifier of the service instance assigned by the MEC platform.",
				"type": "string",
				"readOnly": true,
				"example": "ServiceInstance123"
			},
			"serName": {
				"description": "The name of the service. This is how the service producing MEC application identifies the service instance it produces.",
				"type": "string",
				"example": "ExampleService"
			},
			"serCategory": {
				"description": "This type represents the category reference",
				"type": "object",
				"required": [
					"href",
					"id",
					"name",
					"version"
				],
				"properties": {
					"href": {
						"description": "Reference of the catalogue",
						"type": "string",
						"format": "uri",
						"example": "/example/catalogue1"
					},
					"id": {
						"description": "Unique identifier of the category",
						"type": "string",
						"example": "id12345"
					},
					"name": {
						"description": "Name of the category, example values include RNI, Location & Bandwidth Management",
						"type": "string",
						"example": "RNI"
					},
					"version": {
						"description": "Category version",
						"type": "string",
						"example": "version1"
					}
				}
			},
			"version": {
				"description": "Service version",
				"type": "string",
				"example": "ServiceVersion1"
			},
			"state": {
				"description": "This enumeration defines the possible states of a service.",
				"type": "string",
				"enum": [
					"ACTIVE",
					"INACTIVE",
					"SUSPENDED"
				],
				"example": "ACTIVE"
			},
			"transportInfo": {
				"description": "This type represents the general information of a MEC service.",
				"type": "object",
				"required": [
					"id",
					"name",
					"type",
					"protocol",
					"version",
					"endpoint",
					"security"
				],
				"properties": {
					"id": {
						"description": "The identifier of this transport",
						"type": "string",
						"example": "TransId12345"
					},
					"name": {
						"description": "The name of this transport",
						"type": "string",
						"example": "REST"
					},
					"description": {
						"description": "Human-readable description of this transport",
						"type": "string",
						"example": "REST API"
					},
					"type": {
						"description": "The enumeration TransportType represents types of transports",
						"type": "string",
						"enum": [
							"REST_HTTP",
							"MB_TOPIC_BASED",
							"MB_ROUTING",
							"MB_PUBSUB",
							"RPC",
							"RPC_STREAMING",
							"WEBSOCKET"
						],
						"example": "REST_HTTP"
					},
					"protocol": {
						"description": "The name of the protocol used. Shall be set to HTTP for a REST API.",
						"type": "string",
						"example": "HTTP"
					},
					"version": {
						"description": "The version of the protocol used",
						"type": "string",
						"example": "2.0"
					},
					"endpoint": {
						"description": "This type represents information about a transport endpoint",
						"type": "object",
						"oneOf": [{
								"description": "Entry point information of the service as string, formatted according to URI syntax",
								"type": "object",
								"required": [
									"uris"
								],
								"properties": {
									"uris": {
										"type": "array",
										"minItems": 0,
										"items": {
											"description": "Entry point information of the service",
											"type": "string",
											"format": "uri",
											"example": "/mecSerMgmtApi/service/EntryPoint"
										}
									}
								}
							},
							{
								"description": "Entry point information of the service as one or more pairs of IP address and port",
								"type": "object",
								"required": [
									"addresses"
								],
								"properties": {
									"addresses": {
										"type": "array",
										"minItems": 0,
										"items": {
											"description": "A IP address and port pair",
											"type": "object",
											"required": [
												"host",
												"port"
											],
											"properties": {
												"host": {
													"description": "Host portion of the address",
													"type": "string",
													"example": "192.0.2.0"
												},
												"port": {
													"description": "Port portion of the address",
													"type": "integer",
													"format": "uint32",
													"example": 8080
												}
											}
										}
									}
								}
							},
							{
								"description": "Entry point information of the service in a format defined by an implementation, or in an external specification.",
								"type": "object",
								"required": [
									"alternative"
								],
								"properties": {
									"alternative": {
										"type": "object"
									}
								}
							}
						]
					},
					"security": {
						"description": "This type represents security information related to a transport",
						"type": "object",
						"properties": {
							"oAuth2Info": {
								"description": "Parameters related to use of OAuth 2.0",
								"required": [
									"grantTypes",
									"tokenEndpoint"
								],
								"properties": {
									"grantTypes": {
										"description": "List of supported OAuth 2.0 grant types.",
										"type": "array",
										"minItems": 1,
										"maxItems": 4,
										"items": {
											"description": "OAuth 2.0 grant type",
											"type": "string",
											"enum": [
												"OAUTH2_AUTHORIZATION_CODE",
												"OAUTH2_IMPLICIT_GRANT",
												"OAUTH2_RESOURCE_OWNER",
												"OAUTH2_CLIENT_CREDENTIALS"
											],
											"example": "OAUTH2_CLIENT_CREDENTIALS"
										}
									},
									"tokenEndpoint": {
										"description": "The token endpoint",
										"type": "string",
										"format": "uri",
										"example": "/mecSerMgmtApi/security/TokenEndPoint"
									}
								},
								"type": "object"
							}
						}
					},
					"implSpecificInfo": {
						"description": "Additional implementation specific details of the transport",
						"type": "object"
					}
				}
			},
			"serializer": {
				"description": "The enumeration  represents types of serializers",
				"type": "string",
				"enum": [
					"JSON",
					"XML",
					"PROTOBUF3"
				],
				"example": "JSON"
			},
			"scopeOfLocality": {
				"description": "The scope of locality as expressed by \"consumedLocalOnly\" and \"isLocal\". If absent, defaults to MEC_HOST",
				"type": "string",
				"enum": [
					"MEC_SYSTEM",
					"MEC_HOST",
					"NFVI_POP",
					"ZONE",
					"ZONE_GROUP",
					"NFVI_NODE"
				],
				"example": "MEC_SYSTEM"
			},
			"consumedLocalOnly": {
				"description": "Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this  service instance.",
				"type": "boolean",
				"example": false
			},
			"isLocal": {
				"description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.",
				"type": "boolean",
				"example": true
			},
			"livenessInterval": {
				"type": "integer"
			},
			"_links": {
				"type": "object",
				"required": [
					"self"
				],
				"properties": {
					"self": {
						"description": "This type represents a type of link and may be referenced from data structures",
						"type": "object",
						"properties": {
							"href": {
								"description": "URI referring to a resource",
								"type": "string",
								"format": "uri",
								"example": "/mecSerMgmtApi/example"
							}
						}
					},
					"liveness": {
						"description": "This type represents a type of link and may be referenced from data structures",
						"type": "object",
						"properties": {
							"href": {
								"description": "URI referring to a resource",
								"type": "string",
								"format": "uri",
								"example": "/mecSerMgmtApi/example"
							}
						}
					}
				}
			}
		}
	}
}