В этой статье представлены лучшие практики для Spring Boot для разработки интерфейсов REST и делится ими с вами следующим образом:
Глаголы HTTP соответствуют командам SQL
ПОЛУЧАТЬ
Получить ресурсы с сервера, вы можете получить один или несколько ресурсов и получить всю пользовательскую информацию на сервере, Get /пользователи /ID, указанный идентификатор и получить информацию пользователя указанного идентификатора.
ПОЧТА
Создайте новый ресурс на сервере, соответствующий CreatePost /пользователям в команде SQL, чтобы создать нового пользователя
ПОМЕЩАТЬ
Обновите ресурс на сервере, и клиент предоставляет измененный полный ресурс, соответствующий UpdatePut /Users /ID в команде SQL, чтобы обновить всю информацию пользователя с указанным идентификатором
УДАЛИТЬ
Удалить ресурс с сервера и удалить пользовательскую информацию указанного идентификатора, соответствующего leletedElete /users /id в команде SQL
ПЛАСТЫРЬ
Обновите некоторые атрибуты ресурса на сервере, соответствующие UpdatePatch /Users /ID в команде SQL, чтобы обновить определенный атрибут пользователя с указанным идентификатором
Конвенции в URL
Существительные в URL -адресах используют множественные формы
Вопрос о том, использует ли название в URL -адресу единственное число или множественное число, был противоречивым. Существительные в URL обычно соответствуют таблицам в базе данных, а таблицы хранят аналогичные данные. На практике я заставляю использовать множественные формы, которые выглядят более комфортно.
/пользователи/1/1/Роли/Роли/Роли/1
Что касается некоторых нерегулярных и бесчисленных существительных, это зависит от вашего мнения.
/Heroes/Heroes/1/People/People/1/Foots/Foots/1/футы/футы/1/футы/футы/1
Версия
Говорите номера версий, которые будут добавлены в URL, чтобы справиться с несовместимыми и разрушительными изменениями. При выпуске нового API клиент может свободно перейти к новому API и не будет в неприятностях из -за того, что вызывает совершенно другой новый API. Используйте интуитивно понятный префикс «V», чтобы указать, что следующее число - это номер версии, вторичный номер версии не требуется, и версии API не должны часто выпускаться.
/edu/v1/users/edu/v1/роли
Используйте строки запроса для дополнительных, сложных параметров
Чтобы сделать URL меньше и более краткого, установите базовый URL для ресурса, а дополнительные и сложные параметры представлены строками запроса.
/edu/v1/users? enabled = 1 & roleid = 1
Предоставьте информацию о пейджинге
Это не очень хорошая идея, чтобы вернуть все ресурсы в базе данных одновременно, поэтому требуется механизм пейджинга. Обычно известные параметры в базе данных используются для компенсации и ограничения
/edu/v1/users? enabled = 1 & offset = 1 & limit = 15
Если клиент не передает эти параметры, значение по умолчанию должно использоваться, обычно смещение = 0, предел = 10.
Используйте глаголы для запросов не-ресурсов
Иногда вызовы API не включают ресурсы, и в этом случае сервер выполняет операцию и возвращает результат клиенту.
/edu/v1/calc? P = 100
Рассмотрим конкретные ресурсы и поиск по переработке ресурсов
Легко предоставить поиск конкретного конца района. Вам просто нужно использовать соответствующую коллекцию ресурсов и добавить строку поиска в параметры запроса.
/edu/v1/users? username = li Qinghai
Если вам нужно предоставить глобальный поиск всех ресурсов, вам необходимо использовать другой метод.
/edu/v1/search? Key = li Qinghai
Результаты ответа
Используйте небольшую номенклатуру верблюда в качестве идентификатора атрибутов
Как правило, Restful Web Services будут использоваться клиентами, написанными в JavaScript. Клиент преобразует ответ JSON в объект JavaScript, а затем вызывает его свойства. Следовательно, лучше всего следовать общей спецификации кода JavaScript.
Person.year_of_birth // Не рекомендуется, нарушая код JavaScript Общий спецификация Person.yearofbirth // Не рекомендуется, конструктор JavaScript с именем Person.yearofbirth // Рекомендуется
Предоставьте информацию о пейджинге
Когда возвращается много результатов, должна быть предоставлена информация о пейджинге.
{"страница": 0, "размер": 10, "Тотал": 3465, "obj": []}Весенний интерфейс Development Rest Development
Общие аннотации
@RestController
@RestController - это комбинированная аннотация @Responsebody и @Controller.
@Requestmapping
Эта аннотация может быть применена к методу контроллера или к этому классу контроллера. Когда контроллер добавляет аннотацию @requestmapping на уровне класса, эта аннотация применяется ко всем методам процессора контроллера. Аннотация @Requestmapping на методе процессора дополнит объявление @Requestmapping на уровне класса.
@Postmapp
Комбинированная аннотация - это аббревиатура @requestmapping (method = requestmethod.post).
@Putmapping
Комбинированная аннотация - это аббревиатура @Requestmapping (method = requestMethod.put).
@Patchmapp
Комбинированная аннотация - это аббревиатура @Requestmapping (method = requestMethod.patch).
@Deletemapp
Комбинированная аннотация - это аббревиатура @Requestmapping (method = requestMethod.delete).
@Getmapping
Комбинированная аннотация - это аббревиатура @requestmapping (method = requestmethod.get).
@Pathvariable
Получите данные в URL.
@RequestParam
Получает значение запрошенного параметра.
Пример документации API REST и Swagger API
Для использования Swagger, пожалуйста, обратитесь к использованию Swagger2 в проекте Spring Boot. Код в органе метода не важен, важна, так это подпись метода и отображение с глаголами HTTP.
Импорт java.util.date; импорт javax.persistence.entitynotfoundexception; импорт org.springframework.beans.factory.annotation.autowired; импорт org.springframework.data.domain.page; импорт org.spramework.web.annotation.getpaping; org.springframework.web.bind.annotation.patchmapping; import org.springframework.web.bind.annotation.pathvariable; импорт org.springframework.web.bindtation.postmapping; импорт org.spramework.web.bind.Annotation.Requesty; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestparam; импорт org.springframework.web.bind.annotation.restcontroller; import.com.infcn.jianshu.service.usersers. cn.com.infcn.jianshu.exception.bizexception; import cn.com.infcn.jianshu.exception.loginnameorpassworderrorexception; import cn.com.infcn.jianshu.exception.resourceexistsexception; импорт cn.com.infcn.jianshu.model.user; cn.com.infcn.jianshu.util.jsonresult; import io.swagger.annotations.api; import io.swagger.annotations.apiparam;/** * Системный пользовательский контроллер * * @author li Qinghai * */ @at (value = "Системный пользовательский интерфейс", tags = "Система Управление ")@restcontroller@requestmapping ("/v3/edu/users ") открытый класс usercontroller {@autowired private userservice userservice; /** * Добавить пользователя, регистрация * * @param loginname * choundly * @param username * Имя пользователя * @param пароль * пароль login * @param roleid * user role * @return * @Throws resourceExistSexception */@ApioPeration (value = "add user") @postmapping ("//wition jsonresult * @apioperation (value =" ampostmapping ("/"/") public jsonResult (@ApipArAm (name = nameNININIPAPPAPAPAMAPAMAPAR Учетная запись ", обязательно = true) @RequestParam (обязательно = true) @Requestbody String loginName, @apiparam (name =" username ", value =" username ", обязательно = true) @RequestParam (обязательно = true) @Requestbody String usernam пароль, @apiparam (name = "roleid", value = "номер роли пользователя", требуется = true) @RequestParam (требуется = true) @Requestbody string roleid) бросает ресурсы {boolean exists = this.userservice.exists (loginname); if (существует) {бросить новый ресурсоэксистсексапс (loginName); } User user = userservice.create (loginName, пароль, имя пользователя, Roleid); return jsonresult.success (пользователь); } /** * User login with login account and login password* * @param loginName * Login account* @param password * Login password* @throws EntityNotFoundException */ @ApiOperation(value = "Query user information based on user number") @GetMapping("/login") public JsonResult login( @ApiParam(name = "loginName", value = "Login account", required = true) @requestparam (required = true) строка loginname, @apiparam (name = "password", value = "login password", require = true) @requestparam (обязательный = true) String пароль) бросает loginnameorpassworderrorexception {user user = this.userservice.login (loginname, пароль); if (null == user) {бросить новый loginnameorpassworderrorexception (); } return jsonResult.success (user); } /** * Query user information based on user number* * @param id * User number* @throws EntityNotFoundException */ @ApiOperation(value = "Query user information based on user number") @GetMapping("/{id}") public JsonResult read( @ApiParam(name = "id", value = "User number, primary key", required = true) @PathVariable(required = true) String id) throws entitynotfoundexception {user user = this.userservice.getone (id); return jsonresult.success (пользователь); } /** * Account is cancelled, and the user's data is not deleted* * @param userId * User number* @return */ @ApiOperation(value = "Carded out of account") @PatchMapping("/{id}") public JsonResult cancel( @ApiParam(name = "id", value = "User number, primary key", required = true) @PathVariable(required = true) String id) бросает EntityNotFoundException {this.UserService.cancel (id); return jsonresult.success (); }/** * Сбросить пароль * * * @param id * номер пользователя * @param password * new login password * @return */@apioperation (value = "reset password") @patchmapping ("/") public jsonresult updatePassword (@apiparam (name = "id", value = number, primar «Пароль», value = "Новый пароль для входа", обязательный = true) @RequestParam (обязательный = true) String пароль) {this.UserService.updatePassword (id, пароль); return jsonresult.success (); }/** * Комбинированное запрос многоусловных * * @param * Имя пользователя * @param Roleid * Rode * @param start * @param end * end date * @param page * pagination, начиная от 0 * @param size * Номер рядов на страницу, по умолчанию 10 * @return * @ThrowsBection */@ApiOperes JsonResult query( @ApiParam(name = "userName", value = "User name, query keyword", required = false) @RequestParam(required = false) String userName, @ApiParam(name = "roleId", value = "User Role Number", required = false) @RequestParam(required = false) String roleId, @ApiParam(name = "start", value = "User Role Number", required = false) @RequestParam (обязательный = false) Дата старт, @Apiparam (name = "end", value = "номер роли пользователя", обязательный = false) @RequestParam (обязательный = false) Дата END, @Apiparam (name = "page", value = "pagination, какая страница, начиная с 1", defaultValue = "1", Transed = True) @RequestParam (saffultvale = ", 1)", 1) ", 1)" 1, "1)". @Apiparam (name = "size", value = "количество строк на страницу, положительное целое число", defaultValue = "10", требуется = true) @RequestParam (defaultValue = "10", обязательный = true) int size) tos Bizexception {page <пользователь> datas = this.userservice.finddatas (usersame, nepress, end, end, end, end); if (null == dataS || null == datas.getContent () || datas.getContent (). isempty ()) {throw new Bizexception («Пользователь не существует»); } return jsonResult.success (dataS); }}Рендеринг интерфейсного документа Swagger2
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.