Re: Creating a REST API with RPGLE

[email protected] Sat, 8 Oct 2022 10:56:56 -0400
Newsgroups gmane.comp.systems.as400.web
Message-ID <[email protected]>
Thanks Brad.  It looks like you are pointing me to Apache which is where I figured I would end up based on the walls that I kept running into.  

Now the next question is can you point me to a good resource on setting up Apache?  You provided the config for the server but I have no idea where that goes.  When I looked at Apache config, many of the sites that I found assume that I knew things that I don't and consequently I was missing a key piece that caused me to fail.  I really need the "Apache config for dummies" book.  

Us newbies are such a pain sometimes. 😊

As for the SQL, yes, there will definitely be safeguards in place.  I just didn’t figure it was worth the details but I appreciate your callout just in case I didn't know better.  I also learned years ago to protect the SQL so that someone doesn't enter a screen value such as "somevalue';delete from itemtable" to cause a multiple step statement such as 

update mytable set myfield = 'somevalue';delete from itemtable;  <= If you happen to have an itemtable, it is now empty.


-----Original Message-----
From: WEB400 <[email protected]> On Behalf Of Brad Stone
Sent: Saturday, October 8, 2022 9:43 AM
To: Web Enabling the IBM i (AS/400 and iSeries) <[email protected]>
Subject: Re: [WEB400] Creating a REST API with RPGLE

I would suggest outputting JSON as it's more generic and most applications can read it.

Here's a simple program and HTTP config that will do what you want using RPG and YAJL.. you just need to change the $Data subroutine to run your SQL statement, then build the JSON as it reads the results from the command:

https://fieldexit.com/forum/display?threadid=522

PS, passing in straight SQL can be very dangerous in the wrong hands, so I would put some sort of checking so there's not something like delete from lib.file passed in.

On Fri, Oct 7, 2022 at 8:09 PM <[email protected]> wrote:

> First, let me say I am trying to do something here that I have zilch 
> experience with from the IBM i perspective.  I have done this type of 
> stuff using C#.Net on Windows but nothing on the IBM i.  Yesterday was 
> my first voyage into IBM Web Administration for i.
>
> That said, I am trying to create a REST API written in RPGLE that will 
> return JSON data.  I have looked at a lot of examples but just can't 
> find what I am after.
>
> This needs to be modeled after some existing C#.Net REST APIs so the 
> following requirements are not negotiable.
>
> The request needs to be a POST type.
> The body of the POST request needs to have two "fields".
>   1) Input - An SQL statement that will be used to retrieve the data.
>   2) Output - The results of the SQL.  These results can be anything 
> so the fields can't be predefined in the RPGLE program's parameters 
> like they are in all of the examples that I find.  There can also be 
> multiple records so it would end up having an array in the results.  I 
> think I need a single "results" field that is pretty big and I will 
> need to manually build the JSON for it.
>
> I tried creating a new HTTP server and deploying a service to it.  I 
> have been successful using Scott's customer lookup as a model and I 
> have been able to do a few different things to experiment.  However, I 
> can't figure out how to handle the POST body for input or the array 
> results in the output.
>
> One attempt was to create the following:
>        dcl-pi *n;
>          sql char(5000);
>          resultSet char(50000);
>        end-pi;
> The problem was that I got back a value in the resultSet that was 
> really junked up JSON because it escaped all of the " as \".  I 
> considered trying to make the resultSet value return as plain text 
> instead of JSON (I'm assuming I can do that somehow) but I decided 
> before I went too far down the wrong rabbit hole, I would ask for 
> help.
>
> Can someone help point me in a good direction?  I don't mind doing a 
> lot of web digging, I just don't really know what I need to search for 
> to do the digging.
>
> Thanks.
>
>
> --
> This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) 
> mailing list To post a message email: [email protected] To 
> subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/web400
> or email: [email protected] Before posting, please 
> take a moment to review the archives at 
> https://archive.midrange.com/web400.
>
>
--
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/web400
or email: [email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/web400.


-- 
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/web400
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/web400.