[toc]
iDempiere json(rest api)
## 來源
https://github.com/bxservice/idempiere-rest/tree/release-11?tab=readme-ov-file
## 整體流程
``` mermaid
flowchart TD
抓git --如果服務器沒有專案--> 開發本機
抓git --如果有parent專案--> 服務器
開發本機 --mvn verify--> 產jar
服務器 --mvn verify--> 產jar
產jar -->服務器
服務器 -->執行(執行 update-rest-extensions.sh 重啟)
執行 -->檢查(檢查API)
執行 -->啟動說明文件(啟動說明文件 yml)
執行 -->下載(下載postman sample)
下載 --via 說明文件--> 檢查
```
## 本機作業
git clone 整個project 後去 mvn verify (build)後丟上去
:::info
這個資料夾要跟主心骨同等級
:::

```bash=
# clone
git clone https://github.com/bxservice/idempiere-rest.git
cd idempiere-rest
# build
mvn verify
# 上傳到Server 上的位置
scp -r /Users/tom/workspace/idempiere/idempiere-rest tom@192.168.1.49:/home/tom/linux/gtk/x86_64
```

## server 作業
執行指定位置
:::warning
文件上是這樣寫
at your idempiere instance's root folder (for instance, /opt/idempiere), run ./update-rest-extensions.sh <file or url path to com.trekglobal.idempiere.extensions.p2/target/repository>
for e.g, if your source is at /ws/idempiere-rest, ./update-rest-extensions.sh file:////ws/idempiere-rest/com.trekglobal.idempiere.extensions.p2/target/repository
:::

以我們的案例要改成這樣的語句
```
./idempiere-rest/update-rest-extensions.sh file:///home/tom/linux/gtk/x86_64/idempiere-rest/com.trekglobal.idempiere.extensions.p2/target/repository
```
如果直接進到idempiere-rest去執行update-rest-extensions.sh 會不認得,路徑要用"file"這個schema指定
沒錯誤訊息就是好消息
需重新啟動 iDempiere
## 測試
然後就可以測試
{{protocol}}://{{host}}:{{port}}/api/v1/auth/tokens


這樣就成功了
然後去引用他的Sample測試
https://github.com/bxservice/idempiere-rest/tree/release-11/com.trekglobal.idempiere.rest.api/postman
:::danger
要使用他的 tokens one step, 另一個產出來的不能用
:::

``` json=
{
"userName": "{{userName}}",
"password": "{{password}}",
"parameters": {
"clientId": {{clientId}},
"roleId": {{roleId}},
"organizationId": {{organizationId}},
"warehouseId": {{warehouseId}},
"language": "{{language}}"
}
}
```
|para|value|
|---|---|
|protocal|http|
|host|192.168.1.49|
|port|8080|
|clientId |11|
|roleId |102|
|organizationId | 11|
|warehouseId |103|
|language |zh_TW|
使用取得的token 打其他的API

## 文件說明
https://editor.swagger.io/
https://github.com/bxservice/idempiere-rest/blob/master/com.trekglobal.idempiere.rest.api/openapi/idempiere-rest.yml

## 特殊情境
``` mermaid
flowchart TD
DB --> AP1
DB --> AP2
```
這個插件整個動作上傳Server並且跑update-prd.sh註冊後重啟
重啟後會看資料庫內有沒有
REST_RESOURCE_ACCESS_CONTROL
REST_TOKEN_SECRET
這兩個KEY
沒有會加入
(還有其他的表 window menu 等等)

---
基於以上的動作
一台DB 兩個AP的狀況,因AP獨立,所以如果在第一台上註冊後,第二台其實是沒有這個OSGi的插件,所以第一台的api成立的時候,資料庫內就會有那兩個value,這個時候第二台是無法打Api的,然後等第二台註冊OSGi後,兩台用的是同一個DB,所以Token可共用
## 產TOKEN

## API文件
位於
https://github.com/bxservice/idempiere-rest/blob/master/com.trekglobal.idempiere.rest.api/openapi/idempiere-rest.yml
接著要自己想辦法根據YML檔做事
``` html
<!DOCTYPE html>
<html>
<head>
<title>iDempiere REST API Docs</title>
<script type="module" src="https://unpkg.com/rapidoc/dist/rapidoc-min.js"></script>
</head>
<body>
<rapi-doc
spec-url="./idempiere-rest.yml"
theme="light"
show-header="true"
render-style="read"
></rapi-doc>
</body>
</html>
```
將這個做成 index.html 並且放在與yml檔同資料夾
``` bash
nohup python3 -m http.server 8081 > logdata.log &
```


https://deepwiki.com/hengsin/idempiere-rest/4.3-data-serialization-and-type-conversion