Linx
Linx 6
Linx 6
  • Get Started
  • Installing
    • Install Linx Designer
    • Install Linx Server
  • Main Concepts
    • Introduction
    • Plugins
    • Functions
    • Types
    • Properties
    • Expressions
    • Control Flow
    • Scope
    • Services
    • Server
  • First Applications
    • Backend (REST)
    • Automation (Timer)
  • Reference
    • Designer
      • User Interface
      • Expression Editor
      • Debugging
    • Server
      • Quick Start
      • User Interface
    • Services
      • Available Services
    • Plugins
      • Linx
        • Content
          • AddToList
          • Boolean
          • Byte
          • ClearList
          • DateTime
          • Decimal
          • Double
          • DoWhile
          • ForEach
          • IfElse
          • Integer
          • List<Type>
          • Return
          • SetValue
          • StartService
          • StopService
          • String
          • ThrowException
          • TryCatch
      • Async
        • Content
          • RunTask
          • Task
          • Task<Type>
          • Wait
          • WaitAll
          • WaitAny
      • Compression
        • Content
          • Zip
          • Unzip
      • Cryptography
        • Content
          • Create ECDSA Keys
          • Create JWT
          • Decrypt
          • Encrypt
          • Generate ECDSA Signature
          • Generate HASH
          • Generate HMAC
          • Generate Random
          • Verify ECDSA Signature
          • Verify JWT
      • CSharp
        • Content
          • CSharpFunction
      • Database
        • Conventions
        • Content
          • BeginTransaction
          • DB Bulk Copy
          • ExecuteSQL
          • Execute Stored Procedure
          • MongoDB Read
          • MongoDB Write
        • Shared Properties
          • Connection Editor
          • SQL Editor
      • Email
        • Content
          • Read Email
          • Send Email
      • Excel
        • Excel Open
        • Excel Read
        • Excel Write
      • File
        • Content
          • Binary File Read
          • Binary File Write
          • Create Temp File
          • Directory Copy
          • Directory Delete
          • Directory Exists
          • Directory List
          • Directory Move
          • Directory Watch
          • File Copy
          • File Delete
          • File Exists
          • File List
          • File Move
          • File Open
          • Robocopy
          • Text File Read
          • Text File Write
      • FTP
        • Content
          • Directory Create
          • Directory Delete
          • Directory Exists
          • File Delete
          • File Exists
          • File Move
          • FTP Download
          • FTP List
          • FTP Upload
        • Shared Properties
          • Connection Editor
      • GoogleDrive
        • Content
          • About
            • GetAbout
          • Changes
            • GetStartPageToken
            • ListChanges
          • Comments
            • CreateComment
            • DeleteComment
            • GetComment
            • ListComments
            • UpdateComment
          • Files
            • CopyFile
            • CreateFile
            • DeleteFile
            • EmptyTrash
            • ExportFile
            • GenerateFieldIds
            • GetFile
            • ListFiles
            • UpdateFile
          • Permissions
            • Createpermission
            • Deletepermission
            • Getpermission
            • Listpermissions
            • Updatepermission
          • Replies
            • Createreply
            • Deletereply
            • Getreply
            • Listreplies
            • Updatereply
          • Revisions
            • Deleterevision
            • Getrevision
            • Listrevisions
            • Updaterevision
          • Types
            • Contenthintsdata
            • humbnaildata
      • GoogleSheets
        • Content
          • DeveloperMetaData
            • GetDeveloperMetaData
            • SearchDeveloperMetaData
          • Sheets
            • CopySheetsTo
          • SpreadSheets
            • BatchUpdateheet
            • GoogleSheets Create
            • GoogleSheets Get
            • GoogleSheets GetByDataFilter
          • Types
            • DataFilter
            • DataFilterValueRange
            • Request
            • Spreadsheet
            • ValueRange
          • Values
            • AppendValues
            • BatchClearValues
            • BatchClearValuesByDataFilter
            • BatchGetValues
            • BatchGetValuesByDataFilter
            • BatchUpdate
            • BatchUpdateByDataFilter
            • ClearValues
            • GetValues
            • UpdateValues
      • GraphQL
        • Content
          • GraphQLQuery
          • GraphQLServer
      • JobScheduler
        • Content
          • JobScheduler Service
      • JSON
        • Content
          • JSON Reader
          • JSON Writer
      • Kafka
        • Content
          • Kafka Service
      • PDF
        • License
        • Content
          • AddWatermark
          • ChangeProtection
          • Concatenate
          • Fill Form
          • Read
          • Sign
          • Split
      • PostgreSQL
        • Conventions
        • Content
          • BeginTransaction
          • BulkImport
          • ExecuteSQL
      • ProcessAutomation
        • Process
      • QuickBooks
        • Content
          • Accounts
            • Account
            • CreateAccount
            • GetAccounts
            • UpdateAccount
          • Attachables
            • Attachable
            • AttachableReference
            • CreateAttachable
            • DeleteAttachable
            • DownloadAttachable
            • GetAttachables
            • UpdateAttachable
            • UploadAttachable
          • BillPayments
            • BillPayment
            • CheckPayment
            • CreateBillPayment
            • DeleteBillPayment
            • CreditCardPayment
            • GetBillPayments
            • UpdateBillPayment
          • Bills
            • Bill
            • CreatebBill
            • DeleteBill
            • GetBills
            • UpdateBill
          • Budget
            • Budget
            • BudgetDetail
            • GetBudgets
          • Classes
            • Class
            • CreateClass
            • GetClasses
            • UpdateClass
          • Common
            • Customfield
            • PhysicalAddress
            • Reference
          • CompanyInfo
            • CompanyInfo
            • GetCompanyInfo
            • NameValue
            • UpdateCompanyInfo
          • CreditMemos
            • CreateCreditMemo
            • CreditMemo
            • DeleteCreditMemo
            • GetCreditMemos
            • UpdateCreditMemo
          • Customers
            • CreateCustomer
            • Customer
            • GetCustomers
            • UpdateCustomer
          • Departments
            • CreateDepartment
            • Department
            • GetDepartments
            • UpdateDepartment
          • Employees
            • CreateEmployee
            • Employee
            • GetEmployees
            • UpdateEmployee
          • Deposits
            • CreateDeposit
            • DeleteDeposit
            • Deposit
            • GetDeposits
            • UpdateDeposit
          • Estimates
            • CreateEstimate
            • DeleteEstimate
            • Estimate
            • GetEstimates
            • UpdateEstimate
          • Invoices
            • CreateInvoice
            • DeleteInvoice
            • GetInvoices
            • Invoice
            • UpdateInvoice
            • VoidInvoice
          • Items
            • createitem
            • getitems
            • item
            • updateitem
          • JournalCodes
            • createjournalcode
            • getjournalcodes
            • journalcode
          • JournalEntries
            • createjournalentry
            • deletejournalentry
            • getjournalentries
            • journalentry
            • updatejournalentry
          • PaymentMethods
            • CreatePaymentMethod
            • GetPaymentMethods
            • PaymentMethod
            • UpdatePaymentMethod
          • Payments
            • CreatePayment
            • CreditCardPayment
            • CreditChargeInfo
            • CreditChargeResponse
            • DeletePayment
            • GetPayments
            • Payment
            • UpdatePayment
            • VoidPayment
          • Pdfs
            • GetPdf
          • Preferences
            • CompanyAccountingPreferences
            • CurrencyPreferences
            • EmailMessagesPreferences
            • GetPreferences
            • Namevalue
            • Preferences
            • ProductAndServicesPreferences
            • ReportPreferences
            • SalesFormsPreferences
            • TaxPreferences
            • TimeTrackingPreferences
            • UpdatePreferences
            • VendorAndPurchasesPreferences
          • PurchaseOrders
            • CreatePurchaseOrder
            • DeletePurchaseOrder
            • GetPurchaseOrders
            • PurchaseOrder
            • UpdatePurchaseOrder
          • Query
            • ChangeDataCapture
            • Count
            • GetQuery
          • Purchases
            • CashPurchase
            • CheckPurchase
            • CreatePurchase
            • CreditCardPurchase
            • DeletePurchase
            • GetPurchases
            • Purchase
            • UpdatePurchase
          • RefundReceipts
            • CheckPayment
            • CreateRefundReceipt
            • DeleteRefundReceipt
            • GetRefundReceipts
            • RefundReceipt
            • UpdateRefundReceipt
          • Reports
            • Column
            • Columndata
            • GetAccountListReport
            • GetAgedPayableDetailReport
            • GetAgedPayablesReport
            • GetAgedReceivableDetailReport
            • GetAgedReceivablesReport
            • GetBalancesheetReport
            • GetCashFlowReport
            • GetClassSalesReport
            • GetCustomerBalanceDetailReport
            • GetCustomerBalanceReport
            • GetCustomerIncomeReport
            • GetCustomerSalesReport
            • GetDepartmentSalesReport
            • GetGeneralLedgerReport
            • GetGeneraLedgerReportFR
            • GetInventoryValuationSummaryReport
            • GetItemSalesReport
            • GetJournalReportFR
          • SalesReceipts
            • CreateSalesReceipt
            • CreditCardPayment
            • CreditChargeInfo
            • CreditChargeResponse
            • DeleteSalesReceipt
            • GetSalesReceipts
            • SalesReceipt
            • UpdateSalesReceipt
            • VoidSalesReceipt
          • TaxAgencies
            • CreateTaxAgency
            • GetTaxAgencies
            • TaxAgency
          • TaxCodes
            • GetTaxCodes
            • TaxCode
            • TaxRateDetail
          • TaxRates
            • EffectiveTaxRate
            • GetTaxRates
            • TaxRate
          • TaxServices
            • CreateTaxService
            • TaxRateDetail
            • TaxService
          • Terms
            • CreateTerm
            • GetTerms
            • Term
            • UpdateTerm
          • TimeActivities
            • CreateTimeActivity
            • DeleteTimeActivity
            • GetTimeactivities
            • TimeActivity
            • UpdateTimeActivity
          • Transactions
            • AccountBasedExpenseLineDetail
            • DepositLineDetail
            • DescriptionOnlyLineDetail
            • DiscountLineDetail
            • DiscountOverride
            • GroupLineDetail
            • ItembasedExpenseLineDetail
            • JournaleEtryLineDetail
            • Line
            • LinkedTransaction
            • Markupinfo
            • PaymentLineDetail
            • PurchaseOrderItemLineDetail
            • SalesItemLineDetail
            • SalesOrderItemLineDetail
            • SubTotalLineDetail
            • TaxLineDetail
            • TDSLineDetail
            • TransactionDeliveryInfo
            • TransactionTaxDetail
          • Transfers
            • CreateTransfer
            • DeleteTransfer
            • GetTransfers
            • Transfer
            • UpdateTransfer
          • VendorCredit
            • createvendorcredit
            • deletevendorcredit
            • getvendorcredits
            • updatevendorcredit
            • vendorcredit
          • Vendors
            • createvendor
            • vendor
            • updatevendor
            • getvendors
      • RabbitMQ
        • Content
          • RabbitMQReader
          • RabbitMQService
          • RabbitMQWriter
      • Redis
        • Content
          • RedisGet
          • RedisSet
          • RedisDelete
      • REST
        • Conventions
        • Content
          • Call REST Endpoint
          • REST Host
          • Simple REST Host
      • SignalR
        • Content
          • SignalR
      • Text
        • Content
          • Razor Template Transform
          • Regular Expression
          • String Builder
      • Utilities
        • Content
          • Assert
          • Command Line
          • Cron
          • Sleep
          • Timer
      • Xero
        • Authentication
        • Content
          • Accounts
            • Account
            • CreateAccount
            • DeleteAccount
            • GetAccounts
            • UpdateAccount
          • Attachments
            • Attachment
            • CreateAttachment
            • GetAttachments
            • UpdateAttachment
          • BankTransactions
            • Bank Transaction
            • CreateBankTransaction
            • GetBankTransactions
            • UpdateBankTransaction
          • BankTransfers
            • BankTransfer
            • BankTransferAccountData
            • CreateBankTransfer
            • GetBankTransfers
          • BrandingThemes
            • BrandingTheme
            • GetBrandingThemes
          • Common
            • Address
            • Allocation
            • CallXeroAPI
            • LineItem
            • PaymentTerm
            • PaymentTerms
            • Phone
            • TrackingCategory
          • Contacts
            • Balance
            • Balances
            • BatchPayments
            • Contact
            • Contact Person
            • ContactTrackingCategory
            • CreateContact
            • GetContacts
            • UpdateContact
          • ContactGroups
            • ContactGroup
            • ContactGroupContact
            • CreateContactGroup
            • CreateContactGroupContact
            • DeleteContactGroupContact
            • GetContactGroups
            • UpdateContactGroup
          • CreditNotes
            • CreateCreditNote
            • CreateCreditNoteAllocation
            • CreditNoteAllocation
            • CreditNote
            • GetCreditNote
            • GetCreditNotes
            • UpdateCreditNote
          • Currencies
            • GetCurrencies
            • Currency
          • Employees
            • CreateEmployee
            • Employee
            • ExternalLink
            • GetEmployees
            • UpdateEmployee
          • ExpenseClaims
            • CreateExpenseClaim
            • ExpenseClaim
            • GetExpenseClaims
            • UpdateExpenseClaim
          • Invoices
            • CreateInvoice
            • GetInvoice
            • GetInvoices
            • Invoice
            • UpdateInvoice
          • Items
            • CreateItem
            • DeleteItem
            • GetItems
            • Item
            • PurchaseDetails
            • SalesDetails
            • UpdateItem
          • Journals
            • GetJournals
            • Journal
            • JournalLine
          • LinkedTransactions
            • CreateLinkedTransaction
            • DeleteLinkedTransaction
            • GetLinkedTransactions
            • LinkedTransaction
            • UpdateLinkedTransaction
          • ManualJournals
            • CreateManualJournal
            • GetManualJournals
            • ManualJournal
            • ManualJournalLine
            • UpdateManualJournal
          • Organisations
            • GetOrganisations
            • Organisation
          • Overpayments
            • CreateOverpaymentAllocation
            • Overpayments
            • OverpaymentAllocation
            • GetOverpayments
          • Payments
            • CreatePayment
            • GetPayments
            • Payment
            • UpdatePayment
          • Prepayments
            • CreatePrepaymentAllocation
            • GetPrepayments
            • Prepayment
            • PrepaymentAllocation
          • PurchaseOrders
            • CreatePurchaseOrder
            • GetPurchaseOrders
            • PurchaseOrder
            • UpdatePurchaseOrder
          • Receipts
            • CreateReceipt
            • GetReceipts
            • Receipt
            • UpdateReceipt
          • RepeatingInvoices
            • GetRepeatingInvoices
            • RepeatingInvoices
            • Schedule
          • TaxRates
            • CreateTaxRate
            • GetTaxRates
            • TaxComponent
            • TaxRate
            • UpdateTaxRate
          • TrackingCategories
            • CreateTrackingCategory
            • CreateTrackingOption
            • DeleteTrackingCategory
            • DeleteTrackingOption
            • GetTrackingCategories
            • TrackingCategory
            • TrackingOption
            • UpdateTrackingCategory
            • UpdateTrackingOption
          • Users
            • User
            • GetUsers
        • Filters
          • OrderBy
          • Where
      • XML
        • Content
          • XML Peek
          • XML Poke
          • XML Reader
          • XML Writer
  • BestPractices
    • Conventions
    • Principles
    • Practices
  • TestRunner
    • How To Use Test Runner
    • Test Runner Console
  • Guides
    • Google
    • MS Graph
    • OAuth2 Authentication
    • REST
    • Salesforce Guide
    • Shopify
    • Writing C# in Linx
    • Xero
  • Release Notes
    • Linx Platform
      • Upgrading from Linx 5
      • 6.10.1
      • 6.10.0
      • 6.9.5
      • 6.9.3
      • 6.9.2
      • 6.9.1
      • 6.8.4
      • 6.8.3
      • 6.8.2
      • 6.8.0
      • 6.7.1
      • 6.7.0
      • 6.6.5
      • 6.6.4
      • 6.6.3
      • 6.6.2
      • 6.6.1
      • 6.6.0
      • 6.5.0
      • 6.4.3
      • 6.4.2
      • 6.4.1
      • 6.3.1
      • 6.3.0
      • 6.2.0
      • 6.1.0
      • 6.0.5
    • Plugins
      • Async
      • Compression
      • Cryptography
      • CSharp
      • Database
      • Email
      • Excel
      • File
      • FTP
      • Google Drive
      • Google Sheets
      • GraphQL
      • Job Scheduler
      • JSON
      • Kafka
      • Linx
      • PDF
      • PostgreSQL
      • Process Automation
      • Quickbooks
      • Rabbit MQ
      • Redis
      • REST
      • SignalR
      • Text
      • Utilities
      • Xero
      • XML
    • Solution Dependencies
      • Compiler
      • Types
Powered by GitBook
On this page
  • Using Custom Objects as Response Body
  • Setting custom responses (ResponseXXX)
  • Internal Error Handling
  • Other Guides for Hosting a REST API
  • Sample
  1. Guides

RESTHost - Handling responses

Last updated 1 month ago

Warning:

The steps provided in this explanation are based on Linx before release 6.4.0.

In there is a Return function in the Linx plugin that must be used for setting the value of a function's result. The SetValue function and $Result cannot be used for this purpose anymore.

Go for details of the Return function.

All operations in a RESTHost service are set to have a default response $Result.Data.HTTPContext.StatusCode of (200) OK with no-content as the response body, regardless of the configuration.

This means that if you do not explicitly set the response to something else or throw an exception, a (200) OK response will be returned.


Using Custom Objects as Response Body

In the API Definition, you can define objects as both inputs and outputs.

When you have defined an object, such as a User:

 User:
      type: object
      properties:
        email:
          type: string
        username:
          type: string
        id:
          type: string
        firstname:
          type: string
        lastname:
          type: string
      required:
        - email
        - username

And reference the object as a response body in the API Definition:

 responses:
        '200':
          description: OK (200)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'

Linx will automatically import the specified object into the operation as the ResponseXXX response body. In this case, the available response body will be Response200. To add additional response codes and objects, just amend them to the API Definition and they will be imported by Linx.

Tip:

When setting these objects, always use the field editor in order to initiate the whole object, and set the individual fields all at once.


Setting custom responses (ResponseXXX)

The logic of an operation’s response works as follows:

At the beginning of an operation, the response $Result.Data.HTTPContext.StatusCode is set to have a default status code of (200) OK.

If the outgoing $Result.Data.HTTPContext.StatusCode is not altered during the operation, then the default Response200 body will be returned with no-content .

If you want to return a different status code, let's say a (404) Not found if a record doesn't exist or a (201) Created when you add a user, then you need to set the $Result.Data.HTTPContext.StatusCode to the appropriate code first in order to initiate the correct response object.

However, in order to set the Output.Data.HTTPContext.StatusCode property you must set (initiate) the entire Output.Data.HTTPContext

Using a SetValue function:

  1. Set the Target property as $Result.Data.HTTPContext

  2. Use the field editor to set the $Result.Data.HTTPContext.StatusCode property

  3. Once you've initiated the respective response object, you can then set the content of the response by referencing $Result.Data.ResponseXXX

So, for instance, if you want to return a (404) Not Found response with the errors included, you first add the response as part of the API Definition like below:

...
  /helloworld:
    get:
      summary: Return the text 'Hello World!'
      description: Return the text 'Hello World!'
      operationId: HelloWorld
      security:
      - Token: []
      responses:
        '200':
          description: OK (200)
          content:
            application/json:
              schema:
                 $ref: '#/components/schemas/User'
        '404':
          description: Not Found (404)
          content:
            application/json:
              schema:
                 $ref: '#/components/schemas/ErrorResponse'
...
components:

      schemas:
...
        ErrorResponse:
          type: object
          properties:
            summary:
              type: string
            error:
              type: string

Then, using a SetValue function, reference the $.Result.Data.HTTPContext as the Target and then use the field editor to set the StatusCode to 404.

Using another SetValue function, reference the $.Result.Data.Response404 as the Target and then using the field editor the individual fields of the response are set as the Source.

The Response404 will be like below:

{ "summary":"Not Found", "error":"Customer ID does not exist." }

Linx Designer View


Internal Error Handling

All operations are set to have a default response HTTP status code of (200) OK with no content as the body regardless of the configuration.

This means that if you do not explicitly set the response to something else or throw an exception, a (200) OK response will be returned.

In terms of handling exceptions:

  • Using a TryCatch function, you are able to execute logic and ‘catch’ any error that occurs.

You are then able to internally handle any exceptions that may occur by using custom logic to do additional processing with this information such as logging or sending email notifications.

  • In cases of internal/custom validation errors, you are also able to return custom error codes such as 404 or 422 for custom errors such as 'Invalid email address'. This is done by setting the custom response.

{ "summary": "Invalid fields", "errors": [ "Username: Already exists [Linx]" ] }

  • If an unhandled exception is thrown or an explicit exception is thrown in any of the request flow stages, then a (500) Internal Server Error will be returned.

  • In order to explicitly throw an exception anywhere in an event, operation, or process, add a ThrowException function.

This will cause a critical exception to be thrown with the below response:

500 (Internal Server Error)

You have the option of including or omitting the actual stack trace errors from the response by altering the RESTHost service Return server errors Property.

In this case, a response containing the stack trace of the error will also be included in the response:

Warning:

The steps provided in this explanation are based on Linx before release 6.4.0.

In Linx 6.4.0 and higher there is a Return function in the Linx plugin that must be used for setting the value of a function's result. The SetValue function and $.Result cannot be used for this purpose anymore.

Other Guides for Hosting a REST API

Sample

Go for details of the Return function.

View our sample solution on .

Linx 6.4.0 and higher
here
here
RESTHost Overview Guide
Get Started - Hello World
Before and After Operation Events
Working with inputs
Securing Your API
Deploying and common issues
Generating API Documentation
Sample Solution: CRUD and File Operations
GitHub
Error handling example
Error stack trace