Linking iOS app to DynamoDB via JSON - ios

Before I begin, the question I will ask may be considered 'newbie', however due to the lack of time I need help and cannot find a simple answer through most documentation provided. I have created an iOS application that currently is referencing an offline '*.json' file for its table. I have created a table in DynamoDB offered by AWS which best suits my need. The issue arises from me attempting to link the db into my application, AWS recommend utilising its SDK, or using additional tools, all of which I do not want to add.
Can someone please provide me with a brief description on how I can export a link in the form of a .json file for my db, and with it the security references I require.
Implementing AWS SDK will require me (correct me if I'm wrong) to rewrite my current 'table' manager which extracts information and passes such to various methods. Currently I am using the following method as shown in the example below, I would like to change this to reference the DynamoDB table I have made.
ThingsDataParser *thingsDataParser = [[ThingsDataParser alloc] init];
NSURL *url = [[NSBundle mainBundle] URLForResource:#"Table" withExtension:#"json"];
thingsArray = [thingsDataParser thingsFromJSONFile:url];

Now, if you dont need to use the SDK, you can directly talk to the DynamoDB REST API from your app code. Making HTTP Requests to DynamoDB - Amazon DynamoDB
However, if you use the SDK, it will only simplify your tasks. Did you see this article about using it from iOS and accessing and using DynamoDB - This is very similar to your need. Storing User Preference in Amazon DynamoDB using the Mobile SDKs.
Now, I didnt understand where the json is coming in the picture. One suggested method of handling such needs, is to have a webside service which reads from Dynamo and sends the data to your app (when it asks) in JSON. This method has the advantage that you dont need to keep the AWS keys in your iOS code (which can potentially be reverse engineered and taken out - difficult but possible).

Related

Which backend service to use for iOS client, flask vs node.js vs firebase firestore?

This is not a coding query. Rather an starting point query.
I am new to iOS app development. I have been given a project by my university to make two iOS applications. One application will store few information about dustbin, like the dustbin's serial number, its type and its location in the campus. The location are named as zone A or B or C. These locations will contain their respective geographic information. These information will be sent to another iOS app. The second iOS app have the functionality of generating a map and routing the app user to the dustbin location. The map and routing facility is to be provided by HERE APIs (it is a constraint, and I cant be flexible with this). All this information flow will be facilitated by a server in between. Also, there should be a database storage management system.
Now note that, the server is not generating any active information itself. It is acting as a PASSIVE element. Client_1 is sending the message to Client_2, and this message is going through the server. this message is of course stored in a database.
Now I have few questions, or I should say few points that I dont understand and I am stuck at it.
Should I use Flask or node.js or Firebase firestore is sufficient?
If I do need to use firestore with flask or node.js, where shall I implement the firestore framework, on the server side (flask or node.js) or at the client side (iOS) ?
If I have to use the firestore in client side, do I need to implement it on both the client codes?
Given that I have to use firestore with one of the server, which one shall I use? Flask or node.js?
The above are few queries, which will help me get started on iOS app development. (Note that the iOS coding is being done with Swift 5.1)
Thank you all.
Firestore will work only as your database, where you could keep collections and documents, regarding the dustbins. As mentioned in the official Firestore documentation:
Use our flexible, scalable NoSQL cloud database to store and sync data for client- and server-side development.
So, you can actually develop your applications using it on either client or server sides. It would depend more on what you would prefer. Firestore supports Node.js, so, considering that, using Node.js makes more sense than Flask.
You can get a nice tutorial on how to do that, accessing the below article.
Write to cloud Firestore using node.js server
However, it's possible to use Firestore, as very well explained in this article, directly with Swift.
There isn't a "final" or correct answer for your question. For this reason, I would recommend you to take a look at both of them and make the decision based on your knowledge and preferences.
Let me know if the information helped you!

How to handle authentication when creating an app that uses Firebase REST

I'm trying to create an application that needs to use a backend. That backend will be used to sync an app created (initially) for iOS, macOS, watchOS. Hope to expand after.
Firebase looks like a nice tool to do that, but it only has so many SDK's. I'd like to unify the codebase as much as possible to utilize code reuse.
Seems like their REST API is the way to go: I just create a framework using REST and we're off: https://firebase.google.com/docs/database/rest/start
However, their authentication doesn't seem to support REST.
How do I get around this limitation? What should I do to get a valid auth token that Firebase will understand?
Please keep in mind that I'm not very experienced with web stuff and even after reading a lot of articles, I'm still confused about how to exactly approach this. For example, this user had a similar concern, but I'm not exactly understanding the answer.
Firebase now officially supports REST API:
https://firebase.google.com/docs/reference/rest/auth/
You can query the Firebase Auth backend through a REST API. This can be used for various operations such as creating new users, signing in existing ones and editing or deleting these users.

How to use the Appery.io REST API with Ruby on Rails to retrieve information from the Appery.io database?

How can I access the Appery.io (or any future db) that is exposed to the REST API using RoR?
So I have an app i built using Appery.io and I also created a test app using RoR that I would like to use to pull information from the Appery.io db and display it on my RoR app.
I am somewhat familiar with REST and get the idea of what it is doing but I am not to certain on how to connect or make a connection from my RoR app to my Appery.io app. Appery.io has the following documentation for their db api, Appery.io DB API .
I have been looking around and also have seen people mention the following gems for HTTP request:
Weary
HTTParty
RestClient
Would I use one of those? I also read about using Active Resource as a possible solution?
Any help with getting started or a tutorial or article to point me in the right direction would be very helpful.
Thanks!
You won't be establishing an ongoing connection, each request/response will be a single query to your Appery DB. You authenticate those calls using a custom header with API key as defined in the documentation. There's an example using cURL that might be a good place to start playing with the API before you pull it into your RoR app. That example shows you how to get your key, too.
It looks like you can use the predefined APIs, or you can define a custom REST API associated with your Appery app? Instructions for building an API appear to be here.
Once you get the calls working from cURL (or other web request client of your choice), adding the calls to the RoR app should be more straightforward. Any of those gems could probably ease that process: I've only used RestClient personally, but found it very straightforward.
Any of those call methods (cURL, other clients, the gems, etc) will allow you specify your URI, method (e.g. GET or POST), headers, request body (where appropriate), and will allow you to examine your response. Take a look at the gem documentation to see how those map exactly - it will vary slightly from tool to tool.
If you don't have prior experience with calling external APIs, and would like a conceptual explanation, I like this article as a (very short!) beginner's guide.

Apple swift - How can an app connect to existing heroku/S3 database

Im new to iOS and new to SWIFT with no previous experience with Obj-C. But, Im not new to Ruby. I have a web based app on heroku and am beginning to learn SWIFT so I can build an iOS counterpart. I need to wrap my head around the bigger picture before I can get started and I can not figure out how these apps connect to databases.
Can an iOS app connect to an S3 database...and share that database with a website? Is there documentation on this process that I have over looked.
Connecting an iOS app to a public database would really be a bad idea - all server logic should be implemented on the client, and you would also need to hardcode database user name and password in your app.
A better way is to create a server app exposing a set of REST APIs and being responsible of dealing with the database. This way you can better control at server side what the app client is able to do on the database.
If you have an order entry app, for instance, you can create APIs to:
login
register
create an order
modify an order
add a contact
delete a contact
etc...
Some of the advantages are that:
in case you need to update the logic (but not the API interface), you just need to update the server, whereas in your scenario you'd need to release a new version of the mobile app
you control and limit how client apps access to the data (preventing for instance a user to access another user's orders)
if you want to develop the same app in another platform (android, ...), you reuse the same APIs
To get started, I'd suggest you to read the AFNetworking tutorial on raywenderlch.com, focused on a ios networking library, but talking about JSON, REST, remote APIs etc.
Next you have to choose a server side technology - the most popular nowadays is node.js - to get started you can read other tutorials on the same website:
http://www.raywenderlich.com/61078/write-simple-node-jsmongodb-web-service-ios-app
http://www.raywenderlich.com/61264/write-ios-app-uses-node-jsmongodb-web-service
if you don't want to use node.js and/or mongodb... the same architecture applies, just languages and technologies differ. Just transpose what you learn from there.
If you want to read about other languages to use at server side, just google for it - if you want to use ruby, try with ios rest api server ruby.
Note: I made no mention of swift because your question looks more like an architectural problem than a language specific problem. The tutorials I mentioned here use objective-c, once you've designed an architecture and chosen the language at server side, you can start looking into how to call REST API from swift.

exposing part of my parse.com api to other developers via ouath 2.0

It's now trivial to create a web app that sits atop Parse.com. Now that I have this webapp, I want to expose parts of it to other developers via an oauth accesible api. So, they can develop an app that lets my site users 'give them permission' via oauth and they can now access the api.
How would I start going about doing this?
Update: After #Mubix response, I felt the following clarification would help
Currently I am accessing Parse from the server via a REST api, to get around any javascript security issues re:api keys etc. So, the api would be served of a server other than Parse. Also, the server code is in javascript / nodejs. I came across https://github.com/jaredhanson/oauth2orize which seems a likely candidate, was wondering how others are doing it and if anyone has actually gone a further step and integrated Parse access.
Hmmm .. Intereesting question!
Legal:
First of all their ToS doesn't seem to prohibit what you are trying to do but you should read it carefully before you start.
Implementation:
While parse doesn't provide feature to build your own APIs you could implement something yourself. You could treat the third party developers as users of your app. And you can use the ACL to control access.
Problems:
I don't see any way to implement oAuth entirely within parse.
How will third party apps access your API? Ideally you would like them to use a REST interface but with the parse.com REST API you won't be able to manage access to different parts of your data.
Conclusion:
It seems like too much trouble to implement the API entirely within parse. I would suggest that you write a thin API layer that takes care of auth and uses parse as the backend. You can use one of the service side libraries available for parse. eg. PHP Library, Node Parse.

Resources