Versioning with URI
You can version a resource using the WSPath attribute. The version is included in the
resource URI.
In effect it means that you have two versions of the API and are able to generate a different openapi.json description per version based on the path of your REST API.
For example, before versioning a resource was at:
http://myhost:6394/gas/ws/r/myGroup/myXcf/resource
After versioning the resource is now at:
http://myhost:6394/gas/ws/r/myGroup/myXcf/myVersion/resource
Even though this in principle breaks the constraint that the URI should refer to a unique resource, it is the preferred way.
Example setting version in the path
This example assumes changes to the profile record type (profileType2) that are not compatible with
the previous version of the API. The WSPath to
the new function now contains a version number (v2) that provides the path to the resource.
IMPORT com
TYPE profileType2 RECORD
id INTEGER,
fname VARCHAR(100),
lname VARCHAR(100),
email VARCHAR(255)
# ...
END RECORD
PUBLIC FUNCTION FetchMyUser2Profile(id INTEGER ATTRIBUTES(WSParam) )
ATTRIBUTES(
WSGet,
WSPath = "/users/v2/{id}",
WSDescription = "Returns a user profile for API v2 ",
WSThrows = "404:user not found"
)
RETURNS profileType2 ATTRIBUTES(WSName = "data",
WSMedia = "application/json,application/xml")
DEFINE p profileType2
TRY
SELECT * INTO p.* FROM users2
WHERE @id = id
IF sqlca.sqlcode == NOTFOUND THEN
CALL com.WebServiceEngine.SetRestError(404,NULL)
END IF
CATCH
LET userError.message = SFMT(" - SQL error:%1 [%2]",
sqlca.sqlcode, SQLERRMESSAGE)
CALL com.WebServiceEngine.SetRestError(400,userError)
END TRY
RETURN p
END FUNCTION
An example of the resource URL, using the new version to retrieve the data for user 1, is:
http://myhost:6394/gas/ws/r/myGroup/myXcf/Accounts/users/v2/1