Appearance
Integration HTTP Service ​
Introduction ​
If you would like to integrate a simple HTTP API instead of gRPC/JSONRPC/process service types, then you will need to prepare the API (check for limitations) and write correct proto files. Then specify the service_type = http parameter when creating your AI service.
Scheme ​

Limitations ​
- Currently, only POST methods are supported;
- Only json in body of request supported;
- No streaming supported;
- Only one proto file for service.
If you run into limitations or get errors, then contact support or open an issue on github. We will try to help you.
Example ​
Let's say we have a simple API on flask (the framework and programming language is not important). The API has two POST methods with different inputs:
python
#!/usr/bin/env python
# encoding: utf-8
import json
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/process', methods=['POST'])
def process():
input_data = json.loads(request.data)
print(input_data['input_data'])
return jsonify({'status': 'ok',
'result': 'simple_result'})
@app.route('/calculate', methods=['POST'])
def calculate():
input_data = json.loads(request.data)
print(input_data['number'])
print(input_data['operation'])
print(input_data['second_number'])
return jsonify({'status': 'ok',
'result': 'simple_result'})
app.run()Let's write a proto file so that the daemon understands correctly how to work with your service:
protobuf
syntax = "proto3";
package service;
// input struct for calculate method
message CalculateInput {
uint64 number = 1;
string operation = 2;
uint64 second_number = 3;
}
// input struct for process method
message ProcessInput {
string input_data = 1;
}
// API has the same outputs for both methods
message CommonOutput {
string status = 1;
string result = 2;
}
service ExampleService {
// specify input and output types for each method
// the method path (/calculate) should be named the same as in the proto file
rpc calculate(CalculateInput) returns (CommonOutput) {}
rpc process(ProcessInput) returns (CommonOutput) {}
}If you need to send any additional parameters for all methods (for example, the secret api key), you can specify them in daemon config parameter service_credentials. The parameter accepts an array, example:
"service_credentials":[
{
"key": "example_body_param",
"value": 12345,
"location": "body"
},
{
"key": "X-API-Key",
"value": "546bd7d4-d3e1-46ba-b752-bc45e4dc5b39",
"location": "header"
}
],With this example daemon will add example_body_param with value 12345 in body to all request to HTTP service. Also, all requests to service will be with X-API-Key header.
Location can be: query, header, body. Key and location must be string.