Author: |
ACSONE SA/NV, Odoo Community Association (OCA) |
License: |
AGPL-3 |
Branch: |
10.0-osi_master |
Repository: |
acsone/rest-framework |
Dependencies: |
component,
and
web |
Languages: |
CSS (2, 0.2%),
HTML (115, 9.0%),
JavaScript (20, 1.6%),
Python (802, 62.5%),
XML (82, 6.4%),
and
reStructuredText (262, 20.4%) |
Other branches: |
10.0,
10.0-abi_master,
10.0-add_base_rest,
10.0-backport-context-provider-lmi,
10.0-backport-from-14.0,
10.0-backport-rest-log,
10.0-base_rest_inherit,
10.0-data_model-lmi,
10.0-fix_base_rest_registry,
10.0-fixrestlog-len,
10.0-improve-doc,
11.0-backport-from-12-13,
11.0-fix_base_rest_registry,
11.0-improve-doc,
12.0,
12.0-asw_master,
12.0-backport-improve-exception-wrap,
12.0-base_rest-cors-options,
12.0-datamodel-experiment,
12.0-fix_base_rest_registry,
12.0-new-api-wip,
13.0,
13.0-48-port,
13.0-backport-base-rest-pydantic,
13.0-backport-extendable,
13.0-base_rest-cors-options,
13.0-fixcrashdesc,
14.0,
14.0-abi_master,
14.0-add-pydantic,
14.0-base-rest-pydantic-lmi,
14.0-base_res_service_add_properties-qgr,
14.0-deprecated-implicit-rest-method,
14.0-fdl_master,
14.0-fix-path-parameter-name,
14.0-fix-response-processing,
14.0-fixcrashdesc,
14.0-moz_master,
15.0,
15.0-initial,
16.0,
16.0-fastapi,
16.0-mfr_fix_base_rest_missing_argument,
16.0-upgrade-pre-commit,
9.0,
and
oca-port-pr--from-14.0-to-13.0 |
Other repositories: |
0x130C/odoo-shopinvader,
AdriaGForgeFlow/odoo-shopinvader,
Ahmad-Datasmith/rest-framework,
Albin-John/odoo-shopinvader,
Change2improve/rest-framework,
Digital5-Odoo/rest-framework,
Gabinete-Digital/rest-framework,
Laurent-Corron/odoo-shopinvader,
LeartS/rest-framework,
LevelPrime/rest-framework,
NeatNerdPrime/rest-framework,
OCA-MUK/rest-framework,
OCA/rest-framework,
SerpentConsultingServices/odoo-shopinvader,
SetRac/rest-framework,
SeuMarco/rest-framework,
TDu/rest-framework,
Tomaskarpovic/rest-framework,
acsone/odoo-shopinvader,
adrienpeiffer/odoo-shopinvader,
ajinvn2019/rest-framework,
akretion/odoo-shopinvader,
akretion/rest-framework,
alecvinent/rest-framework,
altanmur/rest-framework,
andres-mejia/rest-framework,
antoinecln/odoo-shopinvader,
ap-wtioit/odoo-shopinvader,
baotnp/rest-framework,
bigmoney-team/rest-framework,
boky1993/rest-framework,
cedvict/rest-framework,
clementmbr/odoo-shopinvader,
coopiteasy/rest-framework,
czgonroad/odoo-shopinvader,
darshan-odoo/rest-framework,
dndoanh/rest-framework,
elmosolutions/rest-framework,
gaanto/rest-framework,
gastonfeng/rest-framework,
glm-conseil/rest-framework,
grap/odoo-shopinvader,
guewen/rest-framework,
gurneyalex/rest-framework,
guwenfeng/rest-framework,
hinfo506/rest-framework,
hminle/rest-framework,
huntergps/rest-framework,
id42sistemas/rest-framework,
jacky82669513/rest-framework,
jamesvibar/rest-framework,
janverb/rest-framework,
jobiols/oca-rest-framework,
jorgeblanc9/rest-framework,
josuf567/rest-framework,
jriveros/odoo-shopinvader,
jsilvestar/odoo-shopinvader,
lebanggit/rest-framework,
led-startup-studio/rest-framework,
lideritjnma/rest-framework,
marvin981973/rest-framework,
maxindo/rest-framework,
mohamed-helmy/rest-framework,
ngnamuit/rest-framework,
novawish/rest-framework,
odoogap/rest-framework,
oliverzgy/rest-framework,
one2pret/rest-framework,
osvalr/rest-framework,
pscloud/rest-framework,
qq470647251/odoo-shopinvader,
royalline1/rest-framework,
sanube/rest-framework,
sc4you/odoo-shopinvader,
simahawk/rest-framework,
skander-cherif/rest-framework,
themreza/rest-framework,
ursais/rest-framework,
vidtsin/odoo-shopinvader,
wahello/rest-framework,
warp10/rest-framework,
westlyou/odoo-shopinvader,
wuhuizhong/odoo-shopinvader,
x0rzkov/odoo-rest-framework,
xaoxaodigital/rest-framework,
xoe-labs/rest-framework,
xubiuit/rest-framework,
xwh123807/rest-framework,
yasmanycastillo/rest-framework,
and
yvaucher/odoo-shopinvader |
<h1 class="title">Base Rest</h1>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/rest-framework/tree/10.0/base_rest"><img alt="OCA/rest-framework" src="https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/rest-framework-10-0/rest-framework-10-0-base_rest"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/271/10.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This addon provides the basis to develop high level REST APIs for Odoo.</p>
<p>As Odoo becomes one of the central pieces of enterprise IT systems, it often
becomes necessary to set up specialized service interfaces, so existing
systems can interact with Odoo.</p>
<p>While the XML-RPC interface of Odoo comes handy in such situations, it
requires a deep understanding of Odoo’s internal data model. When used
extensively, it creates a strong coupling between Odoo internals and client
systems, therefore increasing maintenance costs.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="id3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#changelog" id="id4">Changelog</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id8">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<a name="usage"></a>
<h2><a class="toc-backref" href="#id2">Usage</a></h2>
<p>To add your own REST service you must provides at least 2 classes.</p>
<ul class="simple">
<li>A Component providing the business logic of your service,</li>
<li>A Controller to register your service.</li>
</ul>
<p>The business logic of your service must be implemented into a component
(<code>odoo.addons.component.core.Component</code>) that inherit from
'base.rest.service'</p>
<pre>
<code>from odoo.addons.component.core import Component
class PingService(Component):
_inherit = 'base.rest.service'
_name = 'ping.service'
_usage = 'ping'
_collection = 'my_module.services'
# The following method are 'public' and can be called from the controller.
def get(self, _id, message):
return {
'response': 'Get called with message ' + message}
def search(self, message):
return {
'response': 'Search called search with message ' + message}
def update(self, _id, message):
return {'response': 'PUT called with message ' + message}
# pylint:disable=method-required-super
def create(self, **params):
return {'response': 'POST called with message ' + params['message']}
def delete(self, _id):
return {'response': 'DELETE called with id %s ' % _id}
# Validator
def _validator_search(self):
return {'message': {'type': 'string'}}
# Validator
def _validator_get(self):
# no parameters by default
return {}
def _validator_update(self):
return {'message': {'type': 'string'}}
def _validator_create(self):
return {'message': {'type': 'string'}}</code>
</pre>
<p>Once your have implemented your services (ping, ...), you must tell to Odoo
how to access to these services. This process is done by implementing a
controller that inherits from <code>odoo.addons.base_rest.controllers.main.RestController</code></p>
<pre>
<code>from odoo.addons.base_rest.controllers import main
class MyRestController(main.RestController):
_root_path = '/my_services_api/'
_collection_name = my_module.services</code>
</pre>
<p>In your controller, _'root_path' is used to specify the root of the path to
access to your services and '_collection_name' is the name of the collection
providing the business logic for the requested service/</p>
<p>By inheriting from <code>RestController</code> the following routes will be registered
to access to your services</p>
<pre>
<code>@route([
ROOT_PATH + '<string:_service_name>',
ROOT_PATH + '<string:_service_name>/search',
ROOT_PATH + '<string:_service_name>/<int:_id>',
ROOT_PATH + '<string:_service_name>/<int:_id>/get'
], methods=['GET'], auth="user", csrf=False)
def get(self, _service_name, _id=None, **params):
method_name = 'get' if _id else 'search'
return self._process_method(_service_name, method_name, _id, params)
@route([
ROOT_PATH + '<string:_service_name>',
ROOT_PATH + '<string:_service_name>/<string:method_name>',
ROOT_PATH + '<string:_service_name>/<int:_id>',
ROOT_PATH + '<string:_service_name>/<int:_id>/<string:method_name>'
], methods=['POST'], auth="user", csrf=False)
def modify(self, _service_name, _id=None, method_name=None, **params):
if not method_name:
method_name = 'update' if _id else 'create'
if method_name == 'get':
_logger.error("HTTP POST with method name 'get' is not allowed. "
"(service name: %s)", _service_name)
raise BadRequest()
return self._process_method(_service_name, method_name, _id, params)
@route([
ROOT_PATH + '<string:_service_name>/<int:_id>',
], methods=['PUT'], auth="user", csrf=False)
def update(self, _service_name, _id, **params):
return self._process_method(_service_name, 'update', _id, params)
@route([
ROOT_PATH + '<string:_service_name>/<int:_id>',
], methods=['DELETE'], auth="user", csrf=False)
def delete(self, _service_name, _id):
return self._process_method(_service_name, 'delete', _id)</code>
</pre>
<p>The HTTP GET '<a class="reference external" href="http://my_odoo/my_services_api/ping">http://my_odoo/my_services_api/ping</a>' will be dispatched to the
method <code>PingService.search</code></p>
<a name="known-issues-roadmap"></a>
<h2><a class="toc-backref" href="#id3">Known issues / Roadmap</a></h2>
<p>The <a class="reference external" href="https://github.com/OCA/rest-framework/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+label%3Abase_rest">roadmap</a>
and <a class="reference external" href="https://github.com/OCA/rest-framework/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Abase_rest">known issues</a> can
be found on GitHub.</p>
<a name="changelog"></a>
<h2 class="with-subtitle"><a class="toc-backref" href="#id4">Changelog</a></h2>
<h2 class="section-subtitle" id="id1"><span class="section-subtitle">10.0.1.0.0</span></h2>
<p>First official version. The addon has been incubated into the
<a class="reference external" href="https://github.com/akretion/odoo-shopinvader">Shopinvader repository</a> from
Akretion. For more information you need to look at the git log.</p>
<a name="bug-tracker"></a>
<h2><a class="toc-backref" href="#id5">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/rest-framework/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/rest-framework/issues/new?body=module:%20base_rest%0Aversion:%2010.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
<a name="credits"></a>
<h2><a class="toc-backref" href="#id6">Credits</a></h2>
<a name="authors"></a>
<h3><a class="toc-backref" href="#id7">Authors</a></h3>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
<a name="contributors"></a>
<h3><a class="toc-backref" href="#id8">Contributors</a></h3>
<ul class="simple">
<li>Laurent Mignon <<a class="reference external" href="mailto:laurent.mignon@acsone.eu">laurent.mignon@acsone.eu</a>></li>
<li>Sébastien Beau <<a class="reference external" href="mailto:sebastien.beau@akretion.com">sebastien.beau@akretion.com</a>></li>
</ul>
<a name="maintainers"></a>
<h3><a class="toc-backref" href="#id9">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/lmignon"><img alt="lmignon" src="https://github.com/lmignon.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/rest-framework/tree/10.0/base_rest">OCA/rest-framework</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>