#REST API

11 Followers · 635 Posts

Representational state transfer (REST) is a software architectural style that defines a set of constraints to be used for creating Web services. Web services that conform to the REST architectural style, called RESTful Web services (RWS), provide interoperability between computer systems on the Internet. RESTful Web services allow the requesting systems to access and manipulate textual representations of Web resources by using a uniform and predefined set of stateless operations. Other kinds of Web services, such as SOAP Web services, expose their own arbitrary sets of operations.

Learn More.

Question Roberto Cahanap · Sep 14, 2018

I'm testing out the new %CSP.REST way of creating an api and having a problem with a POST getting a 405 error.

I get data returned when I do a GET, so I don't think it's a configuration issue or a class issue.

I have no problem with %CSP.Page when creating a REST type method. So what am I missing?

Can someone give me some advice?

Thank you.

8
0 653
Question Stephen Wilson · Sep 14, 2018

So by queryString I mean name-value pairs passed  in as part of the URL. Currently my service works when called like this
http://{{SERVER}}:{{PORT}}/bsolabs/api/codemanagement/testcode/BIO/CRP

What would I need to change so I can call it like this?
http://{{SERVER}}:{{PORT}}/bsolabs/api/codemanagement/testcode?Discipline=BIO&TestCode=CRP

2
0 776
Article Gevorg Arutiunian · Sep 4, 2018 11m read

I already talked about GraphQL and the ways of using it in this article. Now I am going to tell you about the tasks I was facing and the results that I managed to achieve in the process of implementing GraphQL for InterSystems platforms.

What this article is about

  • Generation of an AST for a GraphQL request and its validation
  • Generation of documentation
  • Generation of a response in the JSON format
2
2 1269
Question Andrew Makinson · Sep 3, 2018

In a EnsLib.REST.Operation I have...

Set tSC=..Adapter.Post(.tHttpResponse,,pRequest.stream)

This sends JSON string over HTTP

I am getting this error back from the server

ErrHTTPStatus: Received non-OK status 415 from remote HTTP server: 'HTTP/1.1 415 Unsupported Media Type'

I have been told that the media type should be "JSON"

how do I go about changing the media-type of the HTTP Request?

1
0 1263
Question Andrew Makinson · Sep 3, 2018

Trying to get an outbound operation working using the EnsLib.REST.Operation class but having problems

from the Operation

Class LPCH.FSE.DictionaryItems.All.Operation Extends EnsLib.REST.Operation
{
Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
Property Adapter As EnsLib.HTTP.OutboundAdapter;
Parameter INVOCATION = "Queue";
Method ProcessTaskEX(pRequest As Ens.Request, Output pResponse As Ens.Response As %Status
{
      // Get URL
      Set tURL=..Adapter.URL
      
      // Execute the call
      Set tSC=..Adapter.PostURL(tURL

3
0 1526
Article Evgeny Shvarov · Mar 20, 2018 3m read

Hi, Community!

I’m sure you are using Developer Community analytics built with InterSystems Analytics technology DeepSee:

You can find DC analytics n InterSystems->Analytics menu.

DC Analytics shows interactive dashboards on key figures of DC entities: Posts, Comments, and Members. 

Since the last week, this analytics project is available for everyone with source code and data on DC Github!

1
1 717
Question David.Satorres6134 · Jun 14, 2018

Hi,

I'm getting mad trying to get data from an external REST service that uses Basic Authentication from Ensemble. The BO worked fine when I was using a test server without authentification, but as soon as we need to go to production I cannot have it working.

So far, I've created the username/password at the credentials page (Ensemble-Configure-Credentials). I've setup the BO to use this credentials. But nothing happens.

I've tried with the Rest Client (addon for Mozilla), and using the same address, port and user/pwd works just fine.

8
0 1937
Question Stella Ticker · Jul 20, 2018

The REST webservice works perfectly when run on SOAP UI. This end point server is an https site that uses basic authentication (uname and pwd).  But when I run the request through an Enslib.Rest.Operation using a configured SSL and stored credentials, I get an "unauthorized" error, unless I explicitly hard code the password in the operation class. HS Version is 2014.1 .

I have 2 questions. Pardon me, they are both related!!

4
0 1266
Question Mitch Scobell · Jul 23, 2018

I'm trying to have my REST service return the entire data set for one of our legacy globals.  Currently I am parsing the object from a SQL statement into generic objects to be returned like this:


         Set specimenArray=[]
        
        WHILE resultSet.%Next() {
            Set specimen = {}
            Set specimen.SpecimenId= resultSet.SpecimenId
            Set specimen.ProjectId = resultSet.ProjectId
            
            Set Oref = specimenArray.%Push(specimen)
        }
        
        Set tProxy = specimenArray.%ToJSON()
        set %response.Status = 200
        set %response.

2
0 903
Question Giray Ozel · Jul 10, 2018

I have a CSP REST web application where I'm using delegated authentication via basic authentication in the REST calls. When I do a call to the web app with correct user credentials, I get a  CSPSESSIONID cookie back representing the CSP session, which has started for the user I'm logged in with.

And when I want to log out/end the CSP session with the "CacheLogout=end" query parameter, I get a 401 Unauthorized code back. But the csp session itself does get terminated, which means the logout call was successful.

Is there a way to have it return a 200 OK status code?

3
0 683
Article Chris Stewart · Apr 21, 2017 3m read

or "Didn't you say you would cover Persistent Objects in Part 5, Chris?"

Yes, that was the plan.  This is a pretty important topic, so it get's its own Article

Up until now, we've display widget JSON that has been created by a basic loop.  Clearly this isn't of much value.  Now we have our stack connected together, and we can see that the data is flowing to the Welcome page, it's time to complete the stack and start feeding our service from "real" data.


Let's start with our (very basic) Persistent class for Widgets.  We have 4 properties to hold Name, Description, Price and current Quantity.

4
0 1708
Question Roger de Coninck · Jun 12, 2018

Hello,

I want to convert a json, which passed on in the a REST call, into a request message. 

I use method %ConvertJSONToObject of the %ZEN.Auxiliary.altJSONProvider class.

Set sc = ##class(%ZEN.Auxiliary.altJSONProvider).%ConvertJSONToObject(%request.Content, "TestRequest", .request)

Is there an alternative for this? I want to avoid to use the %ZEN library.

Best Regards

Roger de Coninck

8
0 783
Article Eduard Lebedyuk · Dec 1, 2016 8m read

In this article I would like to present the RESTForms project - generic REST API backend for modern web applications.

The idea behind the project is simple -after I wrote several REST APIs I realized that generally, REST API consists of two parts:

  • Work with persistent classes
  • Custom business logic

And, while you'll have to write your own custom business logic, RESTForms provides all things related to working with persistent classes right out of the box.
Use cases

  • You already have a data model in Caché and you want to expose some (or all) of the information in a form of REST API
  • You are developing a new Caché application and you want to provide a REST API
23
3 5479
Question Guillaume Lepretre · May 14, 2018

Hello,

In all web services, i need to my get login and token. So with Postman, i tried to call a HTTP request where I put the login/token in the header :

 

I tried to get data from Http request header. The REST APi use %CSP.REST. I tried something like that : 

But it didn't work..

Someone can give me some example or other method ?

Regards,

2
0 1984
Question Eduard Lebedyuk · May 9, 2018

I need to redirect user to a url, which is 5000+ characters long.
To do that I set:

set %response.Redirect = url

However, in the browser I receive this header:

LOCATION: <First 3972 characters of the 'url' variable>

In WriteHTTPHeader method of %CSP.Response, where the LOCATION header is
written:

After I added a buffer flush, after the above-mentioned line:

Then in browser I received full, correct value of a LOCATION header.
Is there a better solution?
It's a rest API, so maybe there's some callback method I can override to flush the output buffer? Set device mode? Change buffer size?

8
0 598
Question Joao Palma · May 4, 2018

Hi

We are trying to create a new operation wich gets a XML message and send it's contents in an email.

We've used the SOAP Wizard to generate the Proxy Classes but now we are a bit lost...

What we are trying to achieve is to Create appointments in a Outlook Calendar and send emails.

3
0 452
Question Nael Nasereldeen · Apr 24, 2018

Hi,
Trying to work with REST protocol, using IIS 8, both client and server are Cache servers,
I have the following problem- 
When I send a PUT command, I get the following error:
<HTML><HEAD><TITLE>Length Required</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Length Required</h2>
<hr><p>HTTP Error 411. The request must be chunked or have a content length.</p>
</BODY></HTML>

Get , Post , Delete - work OK.
This problem does not happen if I use Apache, so it's a IIS problem , not a Cache problem.

2
0 1010
Question Bob Felbol · Apr 20, 2018

Hi

Made a request for API REST.

Using HTTP Request adapter.

Adapter As EnsLib.HTTP.OutboundAdapter

Outside the Ensemble an API response is JSON (CORRECT)

Answer in Ensemble: =?Á
Â0 
?_eä,cÒ
'=
*^<YÙF¡í$í¼ÈÞÝt 
oÉ÷ý$?|
¤1¡{Dâhà°Ý?Öù)2ós??R?¸¼?ºd?$,ñD+»??

ÔºQZéýNÕ V{C?óò?b¢?éÍ )$ 
²5Å?wEë? ??©tÖã1z×2FëÊnôeË æ??]Zßq ܺ?á

Help me.

Thank you

8
0 604
Question Laura Blázquez García · Apr 20, 2018

Hello.

We have a request message with properties that has underscore. This is because we need to convert that request to JSON.

The problem is when we try to assign a value in a Business Process with the editor. It doesn't work, it doesn't compile.

How can we fix this?

This is the object used in the request: 

Class test.msg.struct.TestXML Extends (%SerialObject,%XML.Adaptor)
{
Property "status_id" As %String(MAXLEN = "");
Property service As %String(MAXLEN = "");
}

And this is the error:

Compilación iniciada en 04/20/2018 11:17:01 con calificadores 'k'
Compilando clase test.bp.
8
0 1032
Question Stephen Wilson · Apr 19, 2018

Does developing a RESTful API in Caché remove the requirement to use the InterSystems.Data.CacheClient.dll and generate proxy classes using the Caché Object Binding Wizard for .NET web development? If anyone has links to sample applications using .NET with Caché and REST Services, I would be grateful if you could share them.

4
0 629
Announcement Michelle Spisak · Mar 1, 2018

For many in today's interoperability landscape, REST reigns supreme. With the overabundance of tools and approaches to REST API development, what tools do you choose and what do you need to plan for before writing any code?

Now that you've learned how to create a REST API in the REST & Relaxation webinar, see how you can successfully make it big. Join @Eduard Lebedyuk, InterSystems Sales Engineer, for REST API Design and Development. You'll learn design patterns and considerations that allow you to build highly robust, adaptive, and consistent REST APIs.

9
0 947
Article Vitaliy Serdtsev · Nov 17, 2017 6m read

This series of articles aims to address the following topics:

  • Creation of a web application based on REST pages;
  • Overview of some tools for tracing (debugging) HTTP requests;
  • Switching from hyperevents to... hyperevents;
  • Integration with jQuery File Upload;
  • Conversion of JSON from the {id:1,parentId:1} format to the {id:1,children:[{}]} format for tree visualization;
  • Integration with jQuery EasyUI (using datagrid and tree as examples);
  • Other topics.
1
1 1124
Article Chris Stewart · Apr 28, 2017 4m read

In our last lesson, we implemented a new REST Service to allow us to perform CRU operations on Widgets, and refactored our Controllers to allow the page setup to be decouple from the content.

When we created our Widget Services, we did not implement a Deletion operation, which the HTTP Delete verb provides.  As this is a base table for other parts of the Widgets Direct empire, we don't want to be able to do a hard Delete of the WIdget values, as this could cause issues with our ordering and billing modules.

10
0 1317