Versioning between App API and Database - database

I have the following scenario ...
Two versions of the application that accesses an API, running version 1.0 and 1.1. The idea is to go back to version 1.0 if the 1.1 version presents problems.The API should be versioned for each of these versions too
I would like to know the solutions that are being used nowadays to make this process easily and in a safe way.
Also, supposing we are using entity framework, how to solve the migration problem, if version 1.1 of the API has database changes?
I use ASP.NET Web API and SQL Database, both in Azure.

Related

Which is the latest API for the Watson Conversation Service

I am checking out the documentation on IBM Cognitive Services and have come across two ways of connecting to my existing workspace.
Version 1
Version 2
My question is which of them is the one that needs to be used. They both appear to work but I am not sure which one to go with. Is there another API that is latest perhaps?
The latest version API will be on the release notes and the API reference.
https://www.ibm.com/watson/developercloud/doc/conversation/release-notes.html
Using an earlier version number will disable later features, but any workspace created with a later version may not be backward compatible, and results may be unpredictable.
There is currently no way to create earlier workspace structures once there has been an update to the version. But if you have older workspaces, they will still remain compatible.

How to develop a simple database based project

I want to start an information provider service. It works this way:
Some employees will find the information needed and fill a database manually.
Users will request data they need on their client side apps on their own platforms. Some of the project specifications is as follows: 1) Data that will go between database server and clients is really small(Suppose some ordinary images). 2) The client side apps don't need to be kept updated. Once the user of app clicks update button(for example) the app will request the server to send required information. 3)It's important to run client side apps on several platforms like: windows, windows phone, android, ios,... 4) Database doesn't need to be vary fast or vary big.
Note: And It's important to note that I'm not expert and I have some limitations. I know java and html, css, javascript. But I think those are enough for this project. (Am I right?)
So I decided to design this development architecture:
1)Using hibernate and provide a layer for server which stands above hibernate and is used to do database-specific tasks. This layer provides some protocols for client side apps to communicate with server. It enables me to change database later without changing client side apps. 2)Using PhoneGap which is a framework that uses html, css, javascript and produces apps for many platforms.
I really appreciate any suggestion, comment,... Thanks!
The fastest way in Java world would be spring boot. Basically you can configure whole application: datasource, orm, persistance layer and rest services just by adding proper annotations. There are many examples of how to do it. Basically with current implementation of spring jpa and web services you can bind mapped resources to rest services. Also current JPA can generate SQL for you using DAO method name. SO e.g. findPersonByName will generate proper sql for you (of course you need to map your db model in entities but this is also simply done with annotations).
Yes, this is a sufficient tech stack to accomplish your goal. You will have to decide how much logic to implement server-side vs app-side.
Pick a java framework for providing an API so that you can expose a restful API to your apps.
Here are a couple of comparisons from stack overflow:
Which is the best Java REST API?
Easiest frameworks to implement Java REST web services
no! for database you need server side scripting language, like php or perl, java-script is client side and will only work on browser. i recommend first learning mysql database, just the basics how to create Db, table, insert and fetch. then some PHP. i think these will set the ground for your project. '
for development environment : download XAAMP! it comes complete with Sql-database base and PHP.

breeze.js - how coupled are the client and server versions

I have a SPA that uses breeze on the client, and also using the .Net wepapi2/EF6 server libraries. My current version for the client library is :
version:"1.4.6"
metadataVersion:"1.0.5"
The server DLL's have varying version #'s but were installed with the client lib at the same time, so pretty sure they're in sync.
I would like to upgrade the client version to 1.5.3 but not touch the server. Mainly because the server side is all compiled DLL's and if there's any code that breaks during the upgrade, it will be much harder to find/debug the DLL code compared to the client JS that I can see/debug/modify realtime.
So my question is, how coupled are the client/server versions? Can I keep my current server libs and upgrade the client only?
If I did decide to upgrade both, is there anything I should be aware of going from 1.4.6 to 1.5.3 in both the JS and .Net environments?
Thanks
Our recommendation is usually to upgrade both at the same time. In general, we very rarely have breaking changes on the server. ( None in recent memory). But we do occasionally on the client and these are called out in the release notes ( available on the website here: http://www.getbreezenow.com/documentation/release-notes.) Most of these breaking changes are pretty subtle and you are unlikely to ever see one, but...
What does happen occasionally is that we add a new feature to the client that requires some additional code on the server. But this would be unlikely to break anything unless you use the new client feature.
Hope this helps.

Create a back-end database for ios & web apps using filemaker

I'm need to create an ipad app that has access to a relational database as well a lot of images (which should be hosted on the web). My boss suggested that I use Filemaker, as he has a license for one of the versions.
I searched the web for information on what is the best way to do this but I'm not 100% sure I got it right.
Is it possible to use Filemaker for the following?
Create a relational database
'Host' images
Run custom scripts (optional but not strictly required)
Publish all of the above to the web, to be accessed by an ios app (and later an web app) through an API.
I understand the the first three points can be done but couldn't find much on how to publish everything and then access it securely later.
Are there better alternatives?
Thank you in advance
FileMaker Server has a fairly good XML API that supports all operations, including FileMaker scripts. It can be used as is or through the official PHP client. There's also an unofficial Python client for it.

Apply upgrades (application related) to database

Since I've not done this before I am not sure if the way I am planning to do this is okay or is there a better way. Like using Windows Installer or Install Shield or Windows Installer XML (WiX) toolset. Any help would be great, as I have no clue.
We have a product and we ship new version every few months. So far we've only been rolling out complete versions i.e. Either Version 1.0, or Version 1.5, but no upgrade from 1.0 to 1.2 to 1.3 to .... you get the picture, right! So any customer that get version 1.0 cannot upgrade to version 1.2 or 1.3 or even the latest. They'll have to uninstall old version and install the latest version. This is not right, but thats what we could do until now. But we'd like to change it.
My plan is to have a install file with (Sql Scripts) for each upgrade path. Check the table in database that stores the version info and depending on it run different script to upgrade database.
My concern is that this method may not be scalable, once we have more than 5 or 6 different versions.
If you could point to any articles or books on this topic, that would help a lot too.
Also, could we use Windows Installer or Install Shield for this?
thanks,
_UB
We've been using DBGhost for a year or so now to keep our database under source control along with our codebase, and it makes this kind of thing dead easy. It's not just well thought through, but they've been using it to roll out their own code for years, so it's dead solid.
Your problem is a pretty common one, and I've had to deal with this kind of problem at my last job. There is another tool aside from the RedGate tool that may help you do what you need to do. It's a tool called DB Ghost. They explicitly address the versioning problem, and have a packager as well. I would suggest doing a trial of the DB Ghost product because they have some interesting claims concerning multiple version upgrades. This was taken from their FAQ (http://www.innovartis.co.uk/faqs/faqs.aspx):
Q: Our problem is going to be managing
data structure changes during
upgrades. Our product line is
Shrink-Wrapped, or downloadable from
the website. So when a user downloads
an upgrade, they can be upgrading from
a very recent version, with few
database structure changes, or the
upgrade may be from a very old version
with a multitude of structural
changes. One upgrade needs to manage
it all. The user would be offsite, so
we can't hold their hand. We have
users in Greece, Australia, Malaysia,
Norway, etc. How would DB Ghost, if at
all, handle updates in remote
locations?
A: The DB Ghost Packager Plus product was
design to specifically address this
issue as it can dynamically handle the
required updates to a target database
seamlessly.
I'm just mentioning this because our company is trying to do something similar and I was doing research on this tool.
Thanks,
Eric
Do you insist on doing it yourself, or could you see yourself committing and investing in a tool?
I really like the idea of Red-Gate's SQL Packager, which will "diff" your two database versions, and then create a SQL script, a C# project, or a stand-alone executable to upgrade from version 1 to version 2.
Not 100% how you'd be able to upgrade from 1.0, 1.1, 1.2, 1.3 all to 2.0 - check out their website and see if they offer something for that scenario!
Otherwise, I guess it'll get quite thorny and messy......
Marc
In the Rails world they are using a tool/method called Migrations.
Basically is boils down to creating a small sql script to upgrade and downgrade each little change to the database.
When you are testing the application you migrate your database to the version you want and on deployment the application can check what version it needs and migrate to that version.
There are free migration toolkits for most popular languages, they might be part of some MVC framework though.
A nice side effect of migrations is that you have database source code that is easily stored in you source control repository.

Resources