Package: restsuite
restsuiterestsuite is a python package developed to help developers interact with the Netsuite REST API. restsuite offers a number of classes that can be utilized to interact with Netsuite's Suite-Talk, RESTlet, or SuiteQL services. restsuite currently utilizes Netsuite's token authentication methods, however, current development is under way for supporting Netsuite's Oauth2 authentication methods.Installationrestsuite is part of the Python Package Index (PyPI) and can thus be installed with pip:pip install restsuiterestsuite requires a python version of 3.8 or higher and depends on therequests python packageand therequests_oauthlib python packageGetting StartedAs restsuite is an abstraction of the Netsuite API, it will be helpful to become familiar with, or at least reference, the Netsuite API documentation:Suite-Talk DocumentationRESTlet DocumentationSuiteQL DocumentationAuthenticationEach of the provided classes (NetSuiteRest, NetSuiteRESTlet, NetSuiteQL) utilize therequests_oauthlibpackage to handle authentication for the developer. All that is required is basic account information that can be generated in the user's account integration settings (seeREST Web Services Prerequisites and Setupfor a guide on setting up your Netsuite application to utilize REST capabilities)Each class requires that you pass the following attributes upon object instantiation:Netsuite Account ID : This can be found the Netsuite url path (e.g:https://{{ account_id }}.app.netsuite.com))Consumer Key : Consumer Key and Secret are provided upon integration record creationIntegration Record Overview.Consumer Secret : Consumer Secret is provided upon integation record creationIntegration Record OverviewToken Key : Tokens can be generated a number of ways. We are currently developing a Class for generating tokens with theissuetoken endpoint. For the time being, you cangenerate a token with the Netsuite UI.Token Secret : See Token KeySuite-TalkTherestsuite.NetSuiteRestclass provides an interface to NetSuite'sSuite-Talk API.For a full list of available resources, see theNetSuite REST API Browser: Record API v1Examples:Instantiating a Suite-Talk object:importrestsuitenetsuite=restsuite.NetSuiteRest(account_id=NS_ACCOUNT_ID,consumer_key=CONSUMER_KEY,consumer_secret=CONSUMER_SECRET,token_key=TOKEN_KEY,token_secret=TOKEN_SECRET)Getting a Record (GET):url="https://{}.suitetalk.api.netsuite.com/services/rest/record/v1/job".format(NS_ACCOUNT_ID)response=netsuite.request("GET",url)ifresponse.status_code<300:data=response.json()Getting docsIt is important to note here that all classes will require the full URL to be passed to each request method.Creating a Record object (POST):url="https://{}.suitetalk.api.netsuite.com/services/rest/record/v1/job/12345".format(NS_ACCOUNT_ID)body={"entityid":"New Customer","companyname":"My Company","subsidiary":{"id":"1"}}response=netsuite.request("POST",url=url,body=body)Creating docsUpdating a Record object (PATCH):url="https://{}.suitetalk.api.netsuite.com/services/rest/record/v1/job/12345".format(NS_ACCOUNT_ID)body={"entityid":"Updated Customer"}response=netsuite.request("PATCH",url=url,body=body)Updating docsUpserting a Record object (PUT):url="https://{}.suitetalk.api.netsuite.com/services/rest/record/v1/job/12345".format(NS_ACCOUNT_ID)body={"firstName":"John","lastName":"Smith"}response=netsuite.request("PUT",url=url,body=body)Upsert docsDeleting a Record object (DELETE)url="https://{}.suitetalk.api.netsuite.com/services/rest/record/v1/job/12345".format(NS_ACCOUNT_ID)response=netsuite.request("DELETE",url=url)RESTlet"A restlet is a SuiteScript that executes when called by an external application or by another SuiteScript. Depending on how the RESTlet is written and called, it may also return data to the calling application."Therestsuite.NetSuiteRESTletclass acts as an external application that allows you to activate RESTlets based on a handful of HTTP verbs:GETPOSTPUTDELETEThese verbs, however, act more as a guide than as the strict HTTP verbs describedhere. This is because the actual actions taken are defined in the RESTlets themselves, and the verbs are used to call certain functions within the RESTlet. More information can be found on RESTletshere.Examples:Calling a RESTlet is similar to the Suite-Talk methods shown above. Only one example will be given here to highlight the difference in the URL path, everything else will be the same.Sending a GET request to RESTlet:importrestsuitenetsuite=restsuite.NetSuiteRESTlet(account_id=NS_ACCOUNT_ID,consumer_key=CONSUMER_KEY,consumer_secret=CONSUMER_SECRET,token_key=TOKEN_KEY,token_secret=TOKEN_SECRET)url="https://{}.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script={}&deploy={}".format(NS_ACCOUNT_ID,SCRIPT_ID,DEPLOYMENT_ID)response=netsuite.request("GET",url)SuiteQLNetSuite allows for users to query their records their version of SQL, SuiteQL. In order to utilize SuiteQL, query strings are sent to a suiteql endpoint. SuiteQL queries can be sent to Netsuite using the NetSuiteQL class:importrestsuitenetsuite=restsuite.NetSuiteQL(account_id=NS_ACCOUNT_ID,consumer_key=CONSUMER_KEY,consumer_secret=CONSUMER_SECRET,token_key=TOKEN_KEY,token_secret=TOKEN_SECRET)data=netsuite.suiteql("Select * From job where id = 12345")print(data)Thesuiteqlmethod returns a list of dictionary-type objects, where each object is a record of the queried record-type. For this specific example, each object would be a job record-type that matched the id of 12345.