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:
- Create your REST API in Apex as normal
- Create a public site
- 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