Hello Atte Isopuro,
We can use web controllers in Odoo to build REST API for synchronizing odoo with other application.
Agenda is to fetch partner(customer) ids
Steps as follows :
1. Create new file in controller directory and add your code-
###############this is for GET request##########################
class my_api_class(openerp.http.Controller):
@route("/get_partner/<name>/", auth='none')
def get_partner(self,name):
'''Get list of partners ids with matching name '''
if request.httprequest.method=='GET':
partner_obj = request.env['res.partner']
partner_ids_list=partner_obj.search(request.cr,1,[('name','=',name)])
return str(partner_ids_list)
return str('NOT A GET REQUEST')
##########################this is for POST request######################
@route("/insert_partner_data/", auth='none')
def create_partner(self,**vals):
''' create new partner '''
import ipdb;ipdb.set_trace()
partner_obj = request.env['res.partner']
###check if post request###
if request.httprequest.method=='POST' :
####get headers##########
header=request.httprequest.headers
partner_ids_list=partner_obj.create(request.cr,1,**vals)
return str(partner_ids_list)
2. Restart odoo server and hit below URL on browser
#########PYTHON SCRIPT TO CALL REST API#######
import request,json
##get request#####
url_for_get='http://localhost:8069/get_partner/odoopvtltd
resonse=request.get(url_for_get)
###POST request#####
url_post='http://localhost:8069/insert_partner_data'
data_to_post={'name':CNPltd,'email':'test@test.com'}
headers={'key':'value'}
response=requests.post(url_post,data_to_post,headers=headers)
Are you sure that this works? In my experience Odoo will raise an Exception if you try to return JSON-type responses from an HTTP-type URL (the type of the URL defaults to 'http'). If you've tested this and it works then that's great, though I am a little disappointed that we would have to roll our own REST API.
check my updated answer