Wee Yuricich
About
-
Posted Answers
Answer
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 RFC2119 RFC8174 when, and only when, they appear in all capitals, as shown here.
This document is licensed under The Apache License, Version 2.0.
The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to HTTP APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined, a consumer can understand and interact with the remote service with a minimal amount of implementation logic.
An OpenAPI definition can then be used by documentation generation tools to display the API, code generation tools to generate servers and clients in various programming languages, testing tools, and many other use cases.
A self-contained or composite resource which defines or describes an API or elements of an API. The OpenAPI document MUST contain at least one paths field, a components field or a webhooks field. An OpenAPI document uses and conforms to the OpenAPI Specification.
Path templating refers to the usage of template expressions, delimited by curly braces ({}), to mark a section of a URL path as replaceable using path parameters.
Each template expression in the path MUST correspond to a path parameter that is included in the Path Item itself and/or in each of the Path Item's Operations. An exception is if the path item is empty, for example due to ACL constraints, matching path parameters are not required.
The value for these path parameters MUST NOT contain any unescaped "generic syntax" characters described by RFC3986: forward slashes (/), question marks (?), or hashes (#).
Media type definitions are spread across several resources. The media type definitions SHOULD be in compliance with RFC6838.
Some examples of possible media type definitions:
The HTTP Status Codes are used to indicate the status of the executed operation. The available status codes are defined by RFC7231 and registered status codes are listed in the IANA Status Code Registry.
The OpenAPI Specification is versioned using a major.minor.patch versioning scheme. The major.minor portion of the version string (for example 3.1) SHALL designate the OAS feature set. .patch versions address errors in, or provide clarifications to, this document, not the feature set. Tooling which supports OAS 3.1 SHOULD be compatible with all OAS 3.1.* versions. The patch version SHOULD NOT be considered by tooling, making no distinction between 3.1.0 and 3.1.1 for example.
Occasionally, non-backwards compatible changes may be made in minor versions of the OAS where impact is believed to be low relative to the benefit provided.
An OpenAPI document compatible with OAS 3.*.* contains a required openapi field which designates the version of the OAS that it uses.
An OpenAPI document that conforms to the OpenAPI Specification is itself a JSON object, which may be represented either in JSON or YAML format.
For example, if a field has an array value, the JSON array representation will be used:
All field names in the specification are case sensitive. This includes all fields that are used as keys in a map, except where explicitly noted that keys are case insensitive.
The schema exposes two types of fields: Fixed fields, which have a declared name, and Patterned fields, which declare a regex pattern for the field name.
Patterned fields MUST have unique names within the containing object.
In order to preserve the ability to round-trip between YAML and JSON formats, YAML version 1.2 is RECOMMENDED along with some additional constraints:
Note: While APIs may be defined by OpenAPI documents in either YAML or JSON format, the API request and response bodies and other content are not required to be JSON or YAML.
An OpenAPI document MAY be made up of a single document or be divided into multiple, connected parts at the discretion of the author. In the latter case, Reference Objects and Schema Object $ref keywords are used.
It is RECOMMENDED that the root OpenAPI document be named: openapi.json or openapi.yaml.
Data types in the OAS are based on the types supported by the JSON Schema Specification Draft 2020-12. Note that integer as a type is also supported and is defined as a JSON number without a fraction or exponent part. Models are defined using the Schema Object, which is a superset of JSON Schema Specification Draft 2020-12.
As defined by the JSON Schema Validation vocabulary, data types can have an optional modifier property: format. OAS defines additional formats to provide fine detail for primitive data types.
The formats defined by the OAS are:
Throughout the specification description fields are noted as supporting CommonMark markdown formatting. Where OpenAPI tooling renders rich text it MUST support, at a minimum, markdown syntax as described by CommonMark 0.27. Tooling MAY choose to ignore some CommonMark features to address security concerns.
Unless specified otherwise, all properties that are URIs MAY be relative references as defined by RFC3986.
Relative references, including those in Reference Objects, PathItem Object $ref fields, Link Object operationRef fields and Example Object externalValue fields, are resolved using the referring document as the Base URI according to RFC3986.
If a URI contains a fragment identifier, then the fragment should be resolved per the fragment resolution mechanism of the referenced document. If the representation of the referenced document is JSON or YAML, then the fragment identifier SHOULD be interpreted as a JSON-Pointer as per RFC6901.
Relative references in Schema Objects, including any that appear as $id values, use the nearest parent $id as a Base URI, as described by JSON Schema Specification Draft 2020-12. If no parent schema contains an $id, then the Base URI MUST be determined according to RFC3986.
Unless specified otherwise, all properties that are URLs MAY be relative references as defined by RFC3986. Unless specified otherwise, relative references are resolved using the URLs defined in the Server Object as a Base URL. Note that these themselves MAY be relative to the referring document.
In the following description, if a field is not explicitly REQUIRED or described with a MUST or SHALL, it can be considered OPTIONAL.
This is the root object of the OpenAPI document.
This object MAY be extended with Specification Extensions.
The object provides metadata about the API. The metadata MAY be used by the clients if needed, and MAY be presented in editing or documentation generation tools for convenience.
This object MAY be extended with Specification Extensions.
Contact information for the exposed API.
This object MAY be extended with Specification Extensions.
License information for the exposed API.
This object MAY be extended with Specification Extensions.
An object representing a Server.
This object MAY be extended with Specification Extensions.
A single server would be described as:
The following shows how multiple servers can be described, for example, at the OpenAPI Object's servers:
The following shows how variables can be used for a server configuration:
An object representing a Server Variable for server URL template substitution.
This object MAY be extended with Specification Extensions.
Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.
This object MAY be extended with Specification Extensions.
All the fixed fields declared above are objects that MUST use keys that match the regular expression: ^+$.
Field Name Examples:
Holds the relative paths to the individual endpoints and their operations. The path is appended to the URL from the Server Object in order to construct the full URL. The Paths MAY be empty, due to Access Control List (ACL) constraints.
This object MAY be extended with Specification Extensions.
Assuming the following paths, the concrete definition, /pets/mine, will be matched first if used:
The following paths are considered identical and invalid:
The following may lead to ambiguous resolution:
Describes the operations available on a single path. A Path Item MAY be empty, due to ACL constraints. The path itself is still exposed to the documentation viewer but they will not know which operations and parameters are available.
This object MAY be extended with Specification Extensions.
Describes a single API operation on a path.
This object MAY be extended with Specification Extensions.
Allows referencing an external resource for extended documentation.
This object MAY be extended with Specification Extensions.
Describes a single operation parameter.
A unique parameter is defined by a combination of a name and location.
There are four possible parameter locations specified by the in field:
The rules for serialization of the parameter are specified in one of two ways. For simpler scenarios, a schema and style can describe the structure and syntax of the parameter.
For more complex scenarios, the content property can define the media type and schema of the parameter. A parameter MUST contain either a schema property, or a content property, but not both. When example or examples are provided in conjunction with the schema object, the example MUST follow the prescribed serialization strategy for the parameter.
In order to support common ways of serializing simple parameters, a set of style values are defined.
Assume a parameter named color has one of the following values:
The following table shows examples of rendering differences for each value.
This object MAY be extended with Specification Extensions.
A header parameter with an array of 64 bit integer numbers:
A path parameter of a string value:
An optional query parameter of a string value, allowing multiple values by repeating the query parameter:
A free-form query parameter, allowing undefined parameters of a specific type:
A complex parameter using content to define serialization:
Describes a single request body.
This object MAY be extended with Specification Extensions.
A request body with a referenced model definition.
A body parameter that is an array of string values:
Each Media Type Object provides schema and examples for the media type identified by its key.
This object MAY be extended with Specification Extensions.
In contrast with the 2.0 specification, file input/output content in OpenAPI is described with the same semantics as any other schema type.
In contrast with the 3.0 specification, the format keyword has no effect on the content-encoding of the schema. JSON Schema offers a contentEncoding keyword, which may be used to specify the Content-Encoding for the schema. The contentEncoding keyword supports all encodings defined in RFC4648, including "base64" and "base64url", as well as "quoted-printable" from RFC2045. The encoding specified by the contentEncoding keyword is independent of an encoding specified by the Content-Type header in the request or response or metadata of a multipart body -- when both are present, the encoding specified in the contentEncoding is applied first and then the encoding specified in the Content-Type header.
JSON Schema also offers a contentMediaType keyword. However, when the media type is already specified by the Media Type Object's key, or by the contentType field of an Encoding Object, the contentMediaType keyword SHALL be ignored if present.
Examples:
Content transferred in binary (octet-stream) MAY omit schema:
Binary content transferred with base64 encoding:
Note that the Content-Type remains image/png, describing the semantics of the payload. The JSON Schema type and contentEncoding fields explain that the payload is transferred as text. The JSON Schema contentMediaType is technically redundant, but can be used by JSON Schema tools that may not be aware of the OpenAPI context.
These examples apply to either input payloads of file uploads or response payloads.
A requestBody for submitting a file in a POST operation may look like the following example:
In addition, specific media types MAY be specified:
To upload multiple files, a multipart media type MUST be used:
As seen in the section on multipart/form-data below, the empty schema for items indicates a media type of application/octet-stream.
To submit content using form url encoding via RFC1866, the following definition may be used:
In this example, the contents in the requestBody MUST be stringified per RFC1866 when passed to the server. In addition, the address field complex object will be stringified.
When passing complex objects in the application/x-www-form-urlencoded content type, the default serialization strategy of such properties is described in the Encoding Object's style property as form.
It is common to use multipart/form-data as a Content-Type when transferring request bodies to operations. In contrast to 2.0, a schema is REQUIRED to define the input parameters to the operation when using multipart content. This supports complex structures as well as supporting mechanisms for multiple file uploads.
In a multipart/form-data request body, each schema property, or each element of a schema array property, takes a section in the payload with an internal header as defined by RFC7578. The serialization strategy for each property of a multipart/form-data request body can be specified in an associated Encoding Object.
When passing in multipart types, boundaries MAY be used to separate sections of the content being transferred – thus, the following default Content-Types are defined for multipart:
Per the JSON Schema specification, contentMediaType without contentEncoding present is treated as if contentEncoding: identity were present. While useful for embedding text documents such as text/html into JSON strings, it is not useful for a multipart/form-data part, as it just causes the document to be treated as text/plain instead of its actual media type. Use the Encoding Object without contentMediaType if no contentEncoding is required.
Examples:
An encoding attribute is introduced to give you control over the serialization of parts of multipart request bodies. This attribute is only applicable to multipart and application/x-www-form-urlencoded request bodies.
A single encoding definition applied to a single schema property.
This object MAY be extended with Specification Extensions.
A container for the expected responses of an operation. The container maps a HTTP response code to the expected response.
The documentation is not necessarily expected to cover all possible HTTP response codes because they may not be known in advance. However, documentation is expected to cover a successful operation response and any known errors.
The default MAY be used as a default response object for all HTTP codes that are not covered individually by the Responses Object.
The Responses Object MUST contain at least one response code, and if only one response code is provided it SHOULD be the response for a successful operation call.
This object MAY be extended with Specification Extensions.
A 200 response for a successful operation and a default response for others (implying an error):
Describes a single response from an API Operation, including design-time, static links to operations based on the response.
This object MAY be extended with Specification Extensions.
Response of an array of a complex type:
Response with a string type:
Plain text response with headers:
Response with no return value:
A map of possible out-of band callbacks related to the parent operation. Each value in the map is a Path Item Object that describes a set of requests that may be initiated by the API provider and the expected responses. The key value used to identify the path item object is an expression, evaluated at runtime, that identifies a URL to use for the callback operation.
To describe incoming requests from the API provider independent from another API call, use the webhooks field.
This object MAY be extended with Specification Extensions.
The key that identifies the Path Item Object is a runtime expression that can be evaluated in the context of a runtime HTTP request/response to identify the URL to be used for the callback request. A simple example might be $request.body#/url. However, using a runtime expression the complete HTTP message can be accessed. This includes accessing any part of a body that a JSON Pointer RFC6901 can reference.
For example, given the following HTTP request:
The following examples show how the various expressions evaluate, assuming the callback operation has a path parameter named eventType and a query parameter named queryUrl.
The following example uses the user provided queryUrl query string parameter to define the callback URL. This is an example of how to use a callback object to describe a WebHook callback that goes with the subscription operation to enable registering for the WebHook.
The following example shows a callback where the server is hard-coded, but the query string parameters are populated from the id and email property in the request body.
This object MAY be extended with Specification Extensions.
In all cases, the example value is expected to be compatible with the type schema of its associated value. Tooling implementations MAY choose to validate compatibility automatically, and reject the example value(s) if incompatible.
In a request body:
In a parameter:
In a response:
The Link object represents a possible design-time link for a response. The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known relationship and traversal mechanism between responses and other operations.
Unlike dynamic links (i.e. links provided in the response payload), the OAS linking mechanism does not require link information in the runtime response.
For computing links, and providing instructions to execute them, a runtime expression is used for accessing values in an operation and using them as parameters while invoking the linked operation.
This object MAY be extended with Specification Extensions.
A linked operation MUST be identified using either an operationRef or operationId. In the case of an operationId, it MUST be unique and resolved in the scope of the OAS document. Because of the potential for name clashes, the operationRef syntax is preferred for OpenAPI documents with external references.
Computing a link from a request operation where the $request.path.id is used to pass a request parameter to the linked operation.
When a runtime expression fails to evaluate, no parameter value is passed to the target operation.
Values from the response body can be used to drive a linked operation.
Clients follow all links at their discretion. Neither permissions, nor the capability to make a successful call to that link, is guaranteed solely by the existence of a relationship.
As references to operationId MAY NOT be possible (the operationId is an optional field in an Operation Object), references MAY also be made through a relative operationRef:
or an absolute operationRef:
Note that in the use of operationRef, the escaped forward-slash is necessary when using JSON references.
Runtime expressions allow defining values based on information that will only be available within the HTTP message in an actual API call. This mechanism is used by Link Objects and Callback Objects.
The runtime expression is defined by the following ABNF syntax
Here, json-pointer is taken from RFC6901, char from RFC7159 and token from RFC7230.
The name identifier is case-sensitive, whereas token is not.
The table below provides examples of runtime expressions and examples of their use in a value:
Runtime expressions preserve the type of the referenced value. Expressions can be embedded into string values by surrounding the expression with {} curly braces.
The Header Object follows the structure of the Parameter Object with the following changes:
A simple header of type integer:
Adds metadata to a single tag that is used by the Operation Object. It is not mandatory to have a Tag Object per tag defined in the Operation Object instances.
This object MAY be extended with Specification Extensions.
A simple object to allow referencing other components in the OpenAPI document, internally and externally.
The $ref string value contains a URI RFC3986, which identifies the location of the value being referenced.
See the rules for resolving Relative References.
This object cannot be extended with additional properties and any properties added SHALL be ignored.
Note that this restriction on additional properties is a difference between Reference Objects and Schema Objects that contain a $ref keyword.
The Schema Object allows the definition of input and output data types. These types can be objects, but also primitives and arrays. This object is a superset of the JSON Schema Specification Draft 2020-12.
For more information about the properties, see JSON Schema Core and JSON Schema Validation.
Unless stated otherwise, the property definitions follow those of JSON Schema and do not add any additional semantics. Where JSON Schema indicates that behavior is defined by the application (e.g. for annotations), OAS also defers the definition of semantics to the application consuming the OpenAPI document.
The OpenAPI Schema Object dialect is defined as requiring the OAS base vocabulary, in addition to the vocabularies as specified in the JSON Schema draft 2020-12 general purpose meta-schema.
The OpenAPI Schema Object dialect for this version of the specification is identified by the URI https://spec.openapis.org/oas/3.1/dialect/base (the "OAS dialect schema id").
The following properties are taken from the JSON Schema specification but their definitions have been extended by the OAS:
In addition to the JSON Schema properties comprising the OAS dialect, the Schema Object supports keywords from any other vocabularies, or entirely arbitrary properties.
The OpenAPI Specification's base vocabulary is comprised of the following keywords:
This object MAY be extended with Specification Extensions, though as noted, additional properties MAY omit the x- prefix within this object.
The OpenAPI Specification allows combining and extending model definitions using the allOf property of JSON Schema, in effect offering model composition. allOf takes an array of object definitions that are validated independently but together compose a single object.
While composition offers model extensibility, it does not imply a hierarchy between the models. To support polymorphism, the OpenAPI Specification adds the discriminator field. When used, the discriminator will be the name of the property that decides which schema definition validates the structure of the model. As such, the discriminator field MUST be a required field. There are two ways to define the value of a discriminator for an inheriting instance.
The xml property allows extra definitions when translating the JSON definition to XML. The XML Object contains additional information about the available options.
It is important for tooling to be able to determine which dialect or meta-schema any given resource wishes to be processed with: JSON Schema Core, JSON Schema Validation, OpenAPI Schema dialect, or some custom meta-schema.
The $schema keyword MAY be present in any root Schema Object, and if present MUST be used to determine which dialect should be used when processing the schema. This allows use of Schema Objects which comply with other drafts of JSON Schema than the default Draft 2020-12 support. Tooling MUST support the OAS dialect schema id, and MAY support additional values of $schema.
To allow use of a different default $schema value for all Schema Objects contained within an OAS document, a jsonSchemaDialect value may be set within the OpenAPI Object. If this default is not set, then the OAS dialect schema id MUST be used for these Schema Objects. The value of $schema within a Schema Object always overrides any default.
When a Schema Object is referenced from an external resource which is not an OAS document (e.g. a bare JSON Schema resource), then the value of the $schema keyword for schemas within that resource MUST follow JSON Schema rules.
For a simple string to string mapping:
For a string to model mapping:
When request bodies or response payloads may be one of a number of different schemas, a discriminator object can be used to aid in serialization, deserialization, and validation. The discriminator is a specific object in a schema which is used to inform the consumer of the document of an alternative schema based on the value associated with it.
When using the discriminator, inline schemas will not be considered.
This object MAY be extended with Specification Extensions.
The discriminator object is legal only when using one of the composite keywords oneOf, anyOf, allOf.
In OAS 3.0, a response payload MAY be described to be exactly one of any number of types:
which means the payload MUST, by validation, match exactly one of the schemas described by Cat, Dog, or Lizard. In this case, a discriminator MAY act as a "hint" to shortcut validation and selection of the matching schema which may be a costly operation, depending on the complexity of the schema. We can then describe exactly which field tells us which schema to use:
The expectation now is that a property with name petType MUST be present in the response payload, and the value will correspond to the name of a schema defined in the OAS document. Thus the response payload:
Will indicate that the Cat schema be used in conjunction with this payload.
In scenarios where the value of the discriminator field does not match the schema name or implicit mapping is not possible, an optional mapping definition MAY be used:
Here the discriminator value of dog will map to the schema #/components/schemas/Dog, rather than the default (implicit) value of Dog. If the discriminator value does not match an implicit or explicit mapping, no schema can be determined and validation SHOULD fail. Mapping keys MUST be string values, but tooling MAY convert response values to strings for comparison.
When used in conjunction with the anyOf construct, the use of the discriminator can avoid ambiguity where multiple schemas may satisfy a single payload.
In both the oneOf and anyOf use cases, all possible schemas MUST be listed explicitly. To avoid redundancy, the discriminator MAY be added to a parent schema definition, and all schemas comprising the parent schema in an allOf construct may be used as an alternate schema.
For example:
a payload like this:
will indicate that the Cat schema be used. Likewise this schema:
will map to Dog because of the definition in the mapping element.
A metadata object that allows for more fine-tuned XML model definitions.
When using arrays, XML element names are not inferred (for singular/plural forms) and the name property SHOULD be used to add that information. See examples for expected behavior.
This object MAY be extended with Specification Extensions.
The examples of the XML object definitions are included inside a property definition of a Schema Object with a sample of the XML representation of it.
Basic string property:
Basic string array property (wrapped is false by default):
In this example, a full model definition is shown.
Changing the element names:
The external name property has no effect on the XML:
Even when the array is wrapped, if a name is not explicitly defined, the same name will be used both internally and externally:
To overcome the naming problem in the example above, the following definition can be used:
Affecting both internal and external names:
If we change the external element but not the internal ones:
Defines a security scheme that can be used by the operations.
Supported schemes are HTTP authentication, an API key (either as a header, a cookie parameter or as a query parameter), mutual TLS (use of a client certificate), OAuth2's common flows (implicit, password, client credentials and authorization code) as defined in RFC6749, and OpenID Connect Discovery. Please note that as of 2020, the implicit flow is about to be deprecated by OAuth 2.0 Security Best Current Practice. Recommended for most use case is Authorization Code Grant flow with PKCE.
This object MAY be extended with Specification Extensions.
Allows configuration of the supported OAuth Flows.
This object MAY be extended with Specification Extensions.
Configuration details for a supported OAuth Flow
This object MAY be extended with Specification Extensions.
Lists the required security schemes to execute this operation. The name used for each property MUST correspond to a security scheme declared in the Security Schemes under the Components Object.
Security Requirement Objects that contain multiple schemes require that all schemes MUST be satisfied for a request to be authorized. This enables support for scenarios where multiple query parameters or HTTP headers are required to convey security information.
When a list of Security Requirement Objects is defined on the OpenAPI Object or Operation Object, only one of the Security Requirement Objects in the list needs to be satisfied to authorize the request.
Optional OAuth2 security as would be defined in an OpenAPI Object or an Operation Object:
While the OpenAPI Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.
The extensions properties are implemented as patterned fields that are always prefixed by "x-".
The extensions may or may not be supported by the available tooling, but those may be extended as well to add requested support (if tools are internal or open-sourced).
Some objects in the OpenAPI Specification MAY be declared and remain empty, or be completely removed, even though they are inherently the core of the API documentation.
The reasoning is to allow an additional layer of access control over the documentation. While not part of the specification itself, certain libraries MAY choose to allow access to parts of the documentation based on some form of authentication/authorization.
Two examples of this:
Answer is posted for the following question.
Answer
What differentiates the immortal Lord from the mortal beings is the Lord’s acting in accordance with the prevalent culture, circumstances and keeping His words. Throughout His life, the Lord exhibited matchless chivalry and maturity with regards to self-awareness.
For instance, when King Dasharatha ordered Him to go into the forest on exile, the Lord without any hesitations accepted the order and immediately proceeded. He could have protested against His father’s decree by saying: “Why should I go?” “I am the eldest of all” “I have not done anything wrong in life.” “These people love me more than their life”. Instead of disregarding the King, the Lord humbly accepted the order. He did not flout any rule. Although the Lord knew that the King’s subjects would lose their life upon losing Him (Rama), He without wasting a day prepared to live.
While seeing the family members off before departure, Rama bowed down to His father who was feeling guilt-tripped and asked for his blessings. The King asked his minister to arrange for cavalry, elephants and horses that would be there in the forest at Rama’s service. However, the Lord refused to accept them. Kaikeyi interrupted: ‘If all this is given to Rama, then what’s left for Bharata?” It was Kaikeyi who forced the King to exile Rama and coronate Bharata (her son) as the next King of Ayodhya. Her words filled with possessiveness failed to anger Rama who bowed down to her also for her blessings.
During exile, Shurpankha (Ravan’s sister) tried to entice Rama and asked Him to marry her. The Lord with a smiling face apologized and introduced her to his wife. Shurpankha failed to convince Him as the Lord maintained an absolute chivalry.
At every step of life, Rama displayed matchless character and morality.
Answer is posted for the following question.
Why ram is called maryada purushottam?
Answer
Jsb is a high-frequency antigen. Anti-Jsb is a rare alloantibody, and its clinical significance is poorly documented.
Answer is posted for the following question.
What is anti jsb?
Answer
KBT Fuels
Address: Indira Bypass Rd, Arithang, Gangtok, Sikkim 737101
Hindustan Petroleum
Address: 8H5Q+45P, NH-31A, Tadong, Gangtok, Sikkim 737101
M.G MARKET
Address: Arithang, Gangtok, Sikkim 737101
Big Bazaar
Address: Nam Nang Commerical Complex, Nam Nang Rd, Gangtok, Sikkim 737101
Denzong Shangrila Hotel & Spa (Managed by Voyage Hospitality)
Address: Jeewan Theeng Marg, Upper Sichey, Sungava, Gangtok, Sikkim 737101
Udaan Hotels | Woodberry Hotel & Spa
Address: Near Swastik Gate, Upper Burtuk, Gangtok, Sikkim 737101
Central Government Holiday Home Gangtok
Address: 8JV7+88H, Baazra, Baluakhani Rd, Sungava, Gangtok, Sikkim 737101
Answer is posted for the following question.
Is there any best Home Oil Prices in Gangtok, Sikkim?