Я создаю систему управления запасами, и я занят проектированием (мышлением) API и моей реализацией REST.
У меня есть следующие ресурсы, и на ресурсе вы можете выполнять много действий/операций. Каждая операция изменяет ресурс, а в некоторых случаях создает новый ресурс, а также создает историю или транзакции.
Я ищу информацию от экспертов относительно удобства использования и приемлемости в отношении дизайна URL и ресурсов. Приветствия и примеры реального мира, любое мнение или критика приветствуются.
Мои опасения в том, что все приложение может развиваться вокруг этого одного большого ресурса? Мой внутренний стек будет С# и servicestack framework, и для интерфейса я буду использовать HTML и AngularJS. Не то чтобы это имело значение.
Сценарий 1. Типичная операция:
POST /inventory/{id}/move
POST /inventory/{id}/scrap
PUT /inventory/{id}/takeon
POST /inventory/{id}/pick
PUT /inventory/{id}/receive
POST /inventory/{id}/hold
POST /inventory/{id}/release
POST /inventory/{id}/transfer
POST /inventory/{id}/return
POST /inventory/{id}/adjustment
{
"userID": "", //who is doing the actions (all)
"tolocationID": "", //new location for inventory (move/takeon/pick/receive/transfer/return)
"qty": "", //qty (pick/receive/takeon/transfer/return)
"comment": "", //optional for transaction (all)
"serial": "", //(takeon/receive)
"batch": "", //(takeon/receive)
"expirydate": "", //(takeon/receive)
"itemCode": "", //(takeon/receive)
"documentID": "", //(pick/receive/return/transfer)
"reference" :"", //(all)
"UOM" :"", //(all)
"reference" :"", //(all)
}
Это приемлемо в отношении стандартов. Другой подход может быть.
Сценарий 2.
POST /inventory/{id}/move
POST /inventory/{id}/scrap
PUT /inventory/{id}/takeon
POST /document/{id}/pick //**document**
PUT /document/{id}/receive //**document**
POST /inventory/{id}/hold
POST /inventory/{id}/release
POST /document/{id}/transfer //**document**
POST /document/{id}/return //**document**
POST /inventory/{id}/adjustment
а затем для изменения ресурсов.
Сценарий 3. На мой взгляд, неправильный
POST /transaction/move/{...}
POST /transaction/scrap/{...}
PUT /transaction/takeon/{...}
POST /transaction/pick/{...}
PUT /transaction/receive/{...}
POST /transaction/hold/{...}
POST /transaction/release/{...}
POST /transaction/transfer/{...}
POST /transaction/return/{...}
POST /transaction/adjustment/{...}
Любые комментарии приветствуются, не ищут ответа, но больше советов по соображениям дизайна?
Спасибо, что нашли время, читая эту запись!