Senior Software Developer with 18+ years of programming experience - 7 years in C/C++, delivering on-time, on-budget multimedia services; 5 years of experience in Java, PHP, JS, HTML5, and 6+ years in Golang, Python and Objective-C.
Website: https://blog.gametechtutorial.com
MYSQL replication architecture is vital for building high available REST API servers.
In order to avoid singe-point of failure problem, it`s recommended that setting 2 application servers and Master-Slave database in MYSQL. Of course, you have to set up the application servers behind the load balancer.
The following details how to setup REST API server by using Spring framework of Java.
How to set up MYSQL Master/Slave replication ?
// Edit
vim /src/main/resources/application.properties
## Master and Slave
spring.datasource.url = jdbc:mysql:replication://localhost1:3306,localhost2:3306/userdb
Since the REST API is based on Http protocol, it is necessary to sniff the http header
and messages to assure that your applications function well. The more you understand
how the Http messages work and communicate, the faster you can make your job done.
The command shown below might be useful for you to dump Http header and message while developing REST API on Ubuntu Linux. Its feature is as same as whireshark on Windows.
tcpdump -A -vvv -i [network card] port [ number]
ex:
tcpdump -A -vvv -i eth0 port 8080
This tutorial will teach you how to validate Store receipt for Google Play and Apple Store using PHP and Unity. You have to upload the PHP (verifyReceipt.php) to your server and set up the Unity plugin and add the following sample codes.
Import Prime31 plugins StoreKit for Apple Store and In-App-Billing for Google Play into Unity.
How to setup In-App-Purchase for IOS ?
There are two steps for this.
Setup Item`s Product Id
Setup Payment Success Event to Get Receipt
Setup Item`s Product Id
Open a demo scene in folder
/Plugins/Prime31/Storekit/demo/StoreKitTestScene.
Edit StoreKitGUIManager.cs and modify Product Id.
/Plugins/Prime31/Storekit/demo/ StoreKitGUIManager.cs
// XXXX is the product Id, which must match what you have in iTunes.
var productIdentifiers = new string[] { "XXXX" };
StoreKitBinding.requestProductData( productIdentifiers );
Setup Payment Success Event to Get Receipt
The following function aims to capture the receipt from Apple when the payment becomes successful, and send the receipt to PHP to validate the receipt`s correctness.
Edit /Plugins/Prime31/Storekit/demo/ StoreKitEventListener.cs
void purchaseSuccessfulEvent( StoreKitTransaction transaction )
{
Debug.Log( "purchaseSuccessfulEvent: " + transaction );
// Get iOS receipt
string receipt = transaction.base64EncodedTransactionReceipt;
// Build POST form
WWWForm form = new WWWForm ();
form.AddField ("key", "1234");
form.AddField ("receipt", receipt);
form.AddField ("en", "prod") // dev, prod
form.AddField ("os", "ios") // ios, android
// Server URL
string url = "http://your server IP/verifyPayment.php";
// Process respond
StartCoroutine(this.DoWWW(new WWW(url, form), (www) => {
Debug.Log("-------- Callback Success: " + www.text);
}));
}
I found it difficult to develop a secure REST API Server from scratch with features like OAuth, MYSQL, HIBERNATE, MYSQL Token Store, JDBCTemplate, and HTTPS. It will take lots of time to put all the features together and make them work properly. In order to reduce redundant work, I therefore created the REST API server template in Spring framework. With this server template, you can focus on developing REST API to meet your needs without being distracted by other technologies.
Get Started
This project is a very simple REST and OAuth server template with high performance. Since the authenticated token is stored in MYSQL, its easy to scale up your server to meet high user traffic.
MVN
Spring-Boot
REST
JPA
MYSQL + HIBERNATE
MYSQL Token Store
JDBCTemplate
Https
Setup MYSQL Database
Import userdb.sql into your database.
import database/userdb.sql into MYSQL database
Enable SSL
// Create key store
bash
keytool -genkey -alias tomcat -keyalg RSA
// Edit
vim /src/main/resources/application.properties
// Uncomment the following lines and set up your key store path
## SSL
server.port=8443
server.ssl.key-store=./src/main/resources/your.jks
server.ssl.key-store-password=your store passowrd
server.ssl.key-password=your pass
Building
You need Java (1.7 or better) and Maven (3.0.5 or better):
$ mvn clean package
$ mvn package
$ java -jar target/*.jar
...
// Http
<app starts and listens on port 8080>
// Https
<app starts and listens on port 8443>
Here are some curl commands to use to get started:
// Get Token
curl -k -X POST -d 'grant_type=client_credentials' --user 'my-client-with-secret:secret' https://localhost:8443/oauth/token
{"access_token":"bf12a9c8-c341-44a6-9ce6-084a8ba86652","token_type":"bearer","expires_in":43199,"scope":"read"}
// hasUserId GET
curl -k -H "Authorization: 5470484a-148d-479f-988e-89dfce617bb1" https://localhost:8443/user/hasUserId?uid=336u594534
{"status":200, "userId": 336u594534}
// Twitter Login POST
curl -k -H "Authorization: Bearer b61db2dd-0af4-4e3c-b2b9-7c307a9d7c69" -X POST -H "Content-Type: application/json" -d "{\"twitterId\": \"0926841831\", \"deviceId\": \"2222\"}" https://localhost:8443/user/twitterLogin
How to optimize MYSQL connection pool ?
// Edit
vim /src/main/resources/application.properties
// Configure initial and maximal connections
spring.datasource.initialSize= 15
spring.datasource.maxActive= 30