Val Mi
Val Mi

Reputation: 39

EmberJs as a PhoneGap with external API

please can you advise on the following:

I have a web application written in emberjs with Rails as back-end. And now I'm going to port this application with phonegap to iOS, and the thing that I'm struggling is how to set my API endpoint that will be working in iPhone?

As I understand EmberJs when used on the web via browser, uses your current location to issue API requests, but this approach doesn't working when using the application as iOS app.

I'm really looking for some elegant solution to simply replace the host name or something?

Thanks for help!

UPDATE:

This one works for changing the API URL

DS.RESTAdapter.reopen({
  url: 'http://somedomain.com'
});

But now, there is access-controll issue:

Origin http://somedomain.com is not allowed by Access-Control-Allow-Origin. 

Upvotes: 2

Views: 1437

Answers (1)

intuitivepixel
intuitivepixel

Reputation: 23322

Since you haven't posted any code on how your adapter is configured, this is the right way to set a custom url for your adapter:

DS.RESTAdapter.reopen({
  url: 'https://somedomain.com/api'
});

Then if you have a model e.g. App.User, the requests for the list of App.User would now go to https://somedomain.com/api/user/ and for a specific user id to https://somedomain.com/api/user/123 respectively.

Update

When testing from the browser you have to start the browser (assuming chrome) with the flag --disable-web-security to make cross origin work. But in real live you have to configure your server to set the response HTTP HEADERS using:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, ...

So in the case of rails you could do something like this to configure your controllers serverside to accept cross origin requests and set the headers accordingly:

...
after_filter :cors_set_access_control_headers

def cors_set_access_control_headers
  headers['Access-Control-Allow-Origin'] = '*'
  headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT' # etc. etc.
  headers['Access-Control-Max-Age'] = "1728000"
end
...

For more extensive examples on how to configure CORS for rails you could search for "CORS for JSON and Rails" for example.

Hope it helps

Upvotes: 4

Related Questions