Setting up a Public REST API

All we need is an easy explanation of the problem, so here it is.

I found a different question asking, “Can I have a public APEX REST API?” which led to a blog post explaining how to setup a public site to expose a REST API:

  1. Create your REST API in Apex as normal
  2. Create a public site
  3. Configure the public user to have access to the Apex class and any other sObjects

I followed the directions and have a publicly available site, but when I do a GET to the URL the site returns a HTTP 503 error page. My understanding is that shouldn’t even be routed through the VF handler.

Webservice code:

@RestResource(urlMapping='/helloWorld/*')
global class RestWebservice {

  @HttpGet
  global static String helloWorld(){
    return 'HelloWorld';
  }

}

URL being queried: https://chale1-developer-edition.na14.force.com/services/apexrest/helloWorld

I have tried:

  • Turning on debug logs for the public site user, but that didn’t help as no logs recorded the error.
  • Verified no redirects are configured
  • With and without a header for Accept: application/json
  • Tried on two different dev orgs, on different instances

Answers to questions:

  • I have not built any apps in this org, nor are there any installed packages, so there are no namespaces
  • Trying /services/apexrest/helloWord/blah returned the same response
  • Most of the raw response is just HTML. The headers have content-type of text/html, X-Powered-By: Salesforce.com ApexPages, P3P: CP=”CUR OTR STA”, cache-control, and nothing else of note

Eventually I would like to have a webhook use this API which is why it needs to be public. What else could cause the service to return a 503?

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

You are using the wrong URL I think

Try this:
https://chale1-developer-edition.na14.force.com/test/services/apexrest/helloWorld

EDIT – When I looked at the HTML that came back original URL in Postman, I saw this message:

https://chale1-developer-edition.na14.force.com/test</i> is down for maintenance

So I realized he must have used added a suffix to the Default Web Address in the Site called test. The REST URL includes the default suffix as part of the full URL, so I added that the URL he provided, and it worked…

Method 2

If you have a managed package & your namespace name is ‘devns‘ then try to add

/services/apexrest/devns/helloWorld

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply