Creating an Entity Using REST (Ruby)
[This document supports a preliminary release of a software product that may be changed substantially prior to final commercial release. This document is provided for informational purposes only.]
As described in Creating an Entity Using REST, this topic provides a Ruby sample to create an entity. You will need to update the code and provide the following:
- Your own credentials
- Your existing authority id
- Your existing container id
- Id for the entity being created
- Provide proxy information
require 'base64'
require 'bigdecimal'
require 'net/https'
require 'openssl'
require 'rexml/document'
require 'uri'
require 'base64'
require 'bigdecimal'
require 'net/http'
require 'rexml/document'
require 'uri'
# Provide your own credentials and sample authority id you want to create
USER_NAME = '<UserName>'
PASSWORD = '<Password>'
AUTHORITY_ID = '<YourExistingAuthorityId>'
CONTAINER_ID = '<YOurExistingContainerId>'
SAMPLE_ENTITY_ID = '<EntityIdToCreate>'
# provide your proxy information
PROXY_ADDRESS = nil
PROXY_PORT = nil
PROXY_USER = nil
PROXY_PASSWORD = nil
SVC_ENDPOINT = 'data.database.windows.net'
SVC_VERSION = 'v1'
# setup credentials
Credentials = Struct.new("Credentials", :un, :pw)
myCred = Credentials.new(USER_NAME, PASSWORD)
#setup proxy information -- if you don't have to use a proxy you can set everything to nil
Proxy_info = Struct.new("Proxy_info", :addr, :port, :user, :pw)
myProxy = Proxy_info.new(PROXY_ADDRESS, PROXY_PORT, PROXY_USER, PROXY_PASSWORD)
reqXml = REXML::Document.new()
reqXml.add_element('Book')
reqXml.root().add_attribute('xmlns:s', 'https://schemas.microsoft.com/sitka/2008/03/')
reqXml.root().add_attribute('xmlns:x', 'http://www.w3.org/2001/XMLSchema')
reqXml.root().add_attribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance' )
reqXml.root().add_element('s:Id')
reqXml.root().elements['s:Id'].text = SAMPLE_ENTITY_ID
reqXml.root().add_element('title')
reqXml.root().add_element('summary')
reqXml.root().add_element('isbn')
reqXml.root().add_element('author')
reqXml.root().add_element('publisher')
reqXml.root().elements['title'].add_attribute('xsi:type', 'x:string')
reqXml.root().elements['title'].text = 'my first used book using REST'
reqXml.root().elements['summary'].add_attribute('xsi:type', "x:string")
reqXml.root().elements['summary'].text = 'Some summary'
reqXml.root().elements['isbn'].add_attribute('xsi:type', "x:string")
reqXml.root().elements['isbn'].text = '1-57880-057-9'
reqXml.root().elements['author'].add_attribute('xsi:type', "x:string")
reqXml.root().elements['author'].text = 'Author A'
reqXml.root().elements['publisher'].add_attribute('xsi:type', "x:string")
reqXml.root().elements['publisher'].text = 'Publisher B'
authorityUri = AUTHORITY_ID + '.' + SVC_ENDPOINT
reqPath= '/' + SVC_VERSION + '/' + CONTAINER_ID
SSDS = Net::HTTP::Proxy(myProxy.addr, myProxy.port, myProxy.user, myProxy.pw).new(authorityUri, 443)
SSDS.use_ssl=true
SSDS.verify_mode=OpenSSL::SSL::VERIFY_NONE
SSDS.start()
myReq = Net::HTTP::Post.new(reqPath)
myReq['Content-Type'] = 'application/x-ssds+xml'
myReq['Content-Length'] = reqXml.to_s.size.to_s
myReq.basic_auth(myCred.un, myCred.pw)
response = SSDS.request(myReq, reqXml.to_s)
method = 'POST'
case response
when Net::HTTPSuccess then
puts SAMPLE_ENTITY_ID + ' created'
error = false
when Net::HTTPForbidden then
puts "SSDS Access denied"
error = true
when Net::HTTPBadRequest then
puts "Request is not valid"
error = true
when Net::HTTPConflict then
puts "Entity already exists"
error = true
else
puts "Unexpected Error"
error = true
end
if (error)
xml = REXML::Document.new(response.body)
puts "SSDS #{method} Error: #{xml.root().elements[1].name} => #{xml.root().elements[1].text}"
puts "SSDS #{method} Error: #{xml.root().elements[2].name} => #{xml.root().elements[2].text}"
end
See Also
Concepts
Creating an Entity Using REST
Examples of Using REST Interface with the SQL Data Services