Author: |
My Company |
License: |
no license |
Branch: |
14.0 |
Repository: |
twtrubiks/odoo-demo-addons-tutorial |
Dependencies: |
web |
Languages: |
Markdown (52, 53.6%),
and
Python (45, 46.4%) |
<h1>odoo 14 教學 - 透過 controller 建立簡單 api</h1>
<ul>
<li><a href="https://youtu.be/q8ec5m4hyEo">Youtube Tutorial - 透過 controller 建立簡單 api</a></li>
</ul>
<p>除了之前教大家 <a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/tree/14.0/xml-rpc-odoo#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-python-xmlrpc-%E9%80%A3%E6%8E%A5-odoo-14">如何使用 python xmlrpc 連接 odoo-14</a> 之外,</p>
<p>也可以透過 controller 建立簡單 api:smile:</p>
<p>這篇文章會教大家如何透過 controller 建立簡單 api,</p>
<p>你可能會問我說是不是 RESTful API, 答:不是:smirk:</p>
<p>在 odoo 中如果要建立 RESTful API,</p>
<p>要透過第三方 addons, 可參考 <a href="https://github.com/OCA/rest-framework">https://github.com/OCA/rest-framework</a></p>
<p>這部份我以後來研究看看:smile:</p>
<p>但我個人覺得如果真的要建立 RESTful API,</p>
<p>可能使用我以前介紹的 <a href="https://github.com/twtrubiks/django-rest-framework-tutorial">Django-REST-framework 基本教學 - 從無到有 DRF-Beginners-Guide</a></p>
<p>會比較理想:smile:</p>
<h2>說明</h2>
<p>練習這個範例時, 請留一個 db 就好 ( 因為如果同個網址底下有很多 db, 會抓不到:sob: )</p>
<p>主要看 <a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/blob/14.0/demo_controller_json/controllers/controllers.py">controllers/controllers.py</a> 即可,</p>
<p>先來看 <code>type='http'</code> 的範例,</p>
<p>```python
......
@http.route('/get<em>res</em>users/type1', type='http', auth='none')
def get<em>res</em>users_http(self):</p>
<pre><code> ......
return json.dumps(data)
</code></pre>
<p>......
```</p>
<p>當 odoo 執行起來後, 測試 api 指令如下,</p>
<p><code>python
import requests
r = requests.get('http://0.0.0.0:8069/get_res_users/type1')
r.text
r.json()
</code></p>
<p><img src="https://i.imgur.com/yYo4Lyr.png" alt="alt tag"></p>
<p>再來看 <code>type='json'</code> 的範例,</p>
<p><code>python
......
@http.route('/get_res_users/type2', type='json', auth='none')
def get_res_users_json(self):
......
return json.dumps(data)
......
</code></p>
<p>這邊要注意:exclamation: 如果使用 <code>type='json'</code>,</p>
<p>就只能使用 <code>jsonrpc</code> 呼叫, 不能使用前面教的方法呼叫,</p>
<p>當 odoo 執行起來後, 測試 api 指令如下,</p>
<p><code>cmd
curl -X POST -H "Content-Type: application/json" -d "{}" http://0.0.0.0:8069/get_res_users/type2
</code></p>
<p>參數說明</p>
<p><code>-H</code> <code>--header</code></p>
<p><code>-d</code> <code>--data</code> HTTP POST data</p>
<p><code>-X</code> <code>--request</code> 使用指定的 request</p>
<p><img src="https://i.imgur.com/wlxJr2i.png" alt="alt tag"></p>