Rest API for Custom Application

We recently brought our ERP software in house and I am having small issues with the update and upgrade of the WCF services that we used in 9.05. The old system was externally hosted, and our application used an external REST API that was hosted on azure. We have people that work remote with our application which is why we need to get it working with e10.

I have had issues getting our system to connect internally since we have moved it all in house. Our application would ping to the the Azure API to have the API go to the HTTPS:// links that we had exposed for 9.05 WCF services. When we brought everything in house our API is considered useless as even if the application pings the API then it tries to go to the links, the links would be dead and can’t make the connection to our ERP.

I tried to use the internal server links to connect the API to the external application. This did not help the issue with how to get the internal servers to route through the Rest API that we have.

Things i have tried to do, i have tried to create a VPN Bridge between azure and our internal servers that are mapped through our firewall to let the data pass through but i keep getting the same errors when i try to update our application. The error is a “There is no endpoint listening on the other end”.

An idea that i have had is creating a https:// link from our domain that we have, like test.thisone.com
from there i was going to see if we could route all of the traffic from that link through the firewall and into the server at 443. This was going to be a way that we can go into the server or that all of the data is being passed into the server so that it can return the values that are needed.

I am not opposed to exposing WCF in E10 to help temporarily get the application up and running at this time. I am just looking for the right solution to get azure to talk to our internal servers so that we can use all of the items that are available for use in E10.

Are you on e10 and if so, what version of e10?
I think framing the environment and specific questions correctly would help to make this more productive.
Did you recently move the hosting of the ERP to in-house or are you talking about the custom app?
Are you trying to use the exposed Epicor WCF services or the Epicor REST services?

You have two main areas you are discussing…

First, you are discussing how to expose your internal network or at least some services to an outside entity - Azure in your case. There are plenty of choices there - VPN, publicly exposing the endpoint and locking the range of i[p addresses allowed to use the public API, etc.That’s all off the shelf Networking domain knowledge and nothing to do with E10. Go get a good network person to assist in the security around that. Just expose an html page and get that working.

Second, now that you have that network connection in place, then it’s time to light up E10. How do you want to do integration?

Previously in V8/E9 you had the ‘service developer guide’ or whatever we called the examples on exposing a service. In E10 this morphed into the WCFServicesDevelopersGuide. With the advent of REST, that’s another option and we desperately need to get an expanded guide out to the community on options available.

Service Connect? JitterBit? REST? SOAP? Client Impls?

All are valid options and have their positives and negatives. I have a start of a doc I pushed out to get folks thinking internally and externally on this topic Integration Doc - Beta testers needed - Experts' Corner - Epicor User Help Forum that I need to get back and get out. FYI - one of the reasons this stalled was the JitterBit announcement. Now that is out of the way, we need to go back to this example effort.

Does that help frame the conversation? Next questions in each?

The ERP got moved in house after issues with a outside provider, so All of our 9.05 is running, We are moving to 10.2 later this year and we decided to make this app work with 10.2 instead of loading it up into 9.05 just to do it again a month later for 10.2.

I am not opposed to getting WCF services setup first to make transition easier, and to give me more time to update the app to the REST API formation and things.

This is my first time using an API. So im kind of new to the Rest Calls.

1 Like

I think that is why we went through azure, because then the azure api was a way to keep the information confidential and non exposed to the public. If we expose an html page that we can use to forward the information through do you think that would work?

I would like to use REST but i know using WCF services would be the fastest way to make the changes since it was on the WCF services in 9.05. If the swap to REST was fast and the implementation of getting the way to put orders through with rest was not a massive change that would be the better bet. also i am on the website for documentation and i cannot find the WCF Services Developers Guide.

The REST API is available in E10.1X, but I believe it’s fully supported after 10.1.500.X.
You’re going to have bigger problems with your upgrade from 9 to 10 than the API, as there are massive underlying architecture changes.

1 Like

WCF services in the classic sense is probably using SOAP. The binary formats we use between client and server rely upon the client proxies in the Contracts assemblies (BOs in E9 / Impls in E10).

With a SOAP approach, you don’t need to manage deploying the Client dlls and keeping them in sync, you just need to update your SOAP client proxies when an API changes. The value of REST is you don’t have any client DLLs to deploy and keep in sync.

2 Likes

I have created a hub in Visual Studio which sits between the outside world and Epicor

External users can access the hub, but not the rest api via the web using basic authentication.

Users call an external facing URL (e.g. htttps://www.testhub/getOrderDetails?OrderNum=123).

This connects to the hub and translates the call into a rest api, which returns the data as json and send it across to the external web page.

I use this for external reporting when users are not logged onto Epicor but need data (e.g. sales people in the field).

It’s a way restricting access to external users and limiting what calls to the REST api are available.

You could even host the hub externally on Azure and then restrict access from the hub to the REST api using ip restrictions on the firewall.

2 Likes

It also insulates the external users from many changes in Epicor. Great call Andrew.

1 Like

This is what we did with the application when we used it with 9.05, we had something in azure that was the buffer, the issue is i don’t know how exactly to get a open https:// link to use to connect the two together.
I mean it sounds like i need a https:// link to use from our domain to link to the application buffer that we have in azure.

That isolation pattern is valuable in many ways. You could even add caching if the data is narrow enough so E10 is never even queried (Some summary data that is only updated every 30 minutes, etc).

1 Like

My method was the website written in javascript using AJAX calls to set of REST calls developed using the web api in Visual Studio.

1 Like

so i ended up exposing the api with a custom link and cert, now i am having issues with it giving back all of the in for in the service. when we pull our customer svc via rest it stops every time at the same person which i am guessing is the limit that the rest api can handle.

Does anyone know how to make the API call pull all of the customers in the list?

One thing i ran into; the API for that itself only pulls like 100 records. If you want a better methodology, use the BAQ service to call a BAQ of the customer list and then call that BAQ

2 Likes