JavaRush /Java блогу /Random-KY /Жаз коркунучтуу эмес. RESTиңизди көзөмөлдөө
Павел
Деңгээл

Жаз коркунучтуу эмес. RESTиңизди көзөмөлдөө

Группада жарыяланган
МАКАЛАЛАР ЦИКЛИНИН МАЗМУНУ Башка бирөөнүн эмгегин кайра колдонуу ар бир иштеп чыгуучу үчүн ыйык маселе 😌 Улантуу үчүн компьютердик тармактын негиздерин түшүнүшүңүз керек, бул жерде бир катар макалалар . Негизги пункттарга көңүл буруңуз: HTTP кантип иштейт, GET, POST, PUT деген эмне, жооп статустары, MVC, JSON жана сериялаштыруу жөнүндө өзүнчө окуңуз . Сунушталган мисалды сервлеттер менен ишке ашыруу пайдалуу болот, бул сизге жазгы жүктү чын жүрөктөн сүйүүгө жардам берет. Бул сериядагы жазгы жүктөө колдонмосунун мисалы абдан жөнөкөй, бирок ал MVCтин маңызын түшүнүүгө жардам берет. Төмөндө кызыктуураак долбоорго шилтеме болот. REST жана анын жазында колдонулушу менен таанышуу үчүн бул үч макаланы окуңуз . Биринчи макалада сиз REST деген эмне экенин окуйсуз. Экинчи макалада суроо-талаптар жана жооптор женунде баяндалат, жолдош Фидель-дин комментарийин окуп чыгууну жана аны эске алуу менен. Үчүнчү макала жазында ишке ашыруунун практикалык мисалын сунуштайт, тиркемени түзүү ыкмасы анча деле айырмаланbyte (карап, салыштыруу пайдалуу), аны ишке ашырыңыз. Алар HttpStatus, ResponseEntity <?> жөнүндө сүйлөшкөн жерге көңүл буруңуз (эгерде <?> түшүнүксүз болсо, анда 13-бөлүмдү окуңуз. "Java. Баштоочунун колдонмосунан жалпылоо", Герберт Шилдт), ушул эле макалада POSTMAN ( кошумча бул тууралуу кыска видео ) POSTMAN орнотуңуз, сизге бардык функциялардын кереги жок, ар кандай сурамдарды кантип түзүүнү караңыз. Мисалда үчтүк операторлор бар , эгер унутуп калсаңыз, эсиңизди жаңыртыңыз. Мисал макала @Autowired аркылуу буурчак инъекциясын кантип ишке ашыраарына көңүл буруңуз
@RestController
public class ClientController {

   private final ClientService clientService;

   @Autowired
   public ClientController(ClientService clientService) {
       this.clientService = clientService;
   }
}
Сиз Spring 4.3 менен баштап, класста бир гана конструктор болсо, @Autowired annotationсын алып салууга болорун бorшиңиз керек. АлHowтын өзү төө буурчакты конструктордо ишке ашыруу керектигин аныктайт. Бул булактан кененирээк окуй аласыз . Эгер этият болсоңуз, анда сизде кызмат пакетинин түзүмү жөнүндө суроо болушу керек, тактап айтканда: эмне үчүн ClientService интерфейси жана ClientServiceImpl коомдук классы бар - бул туура практика, кийинчерээк анын эмне үчүн керектиги жөнүндө сүйлөшөбүз жана биз аны колдонот. Мунун баары макалалар менен. Окуудан мурун, жазалы. Алар айткандай: "Кодсуз күн эмес!" Баштапкы чекит катары, жөнөкөй GET өтүнүчүн түзөлү. Акыркы жолу биз жашылча спекуляциясына арыз жазганбыз, git clone https://FromJava@bitbucket.org/FromJava/speculation.git git clone git@bitbucket.org:FromJava/speculation.git Тиркемени ачып, ru пакетинде. java.rush биз контроллер пакетин түзөбүз (MVC үлгүсүндөгү контроллер бул жерде жайгашат). ProductController жалпы классын түзүңүз
@RestController
@RequestMapping("/speculation")
public class ProductController {

}
@RestController annotationсы Жазга бул эс алуу контроллери экенин көрсөтүп турат. @RequestMapping - Бардык контроллердин ыкмалары annotation кашааларында көрсөтүлгөн сап менен баштала турган URI менен сурамдарды кабыл алат ("/спекуляция"). Класста төмөнкү ыкманы жазабыз
@GetMapping("/simple")
public String simple(){
    return "Легкий GET requestик";
}
Долбоорду ишке киргизебиз, браузердин сабына теребиз: http://localhost:8080/speculation/simple Жоопту алабыз: Easy GET өтүнүчү Бир нече түшүндүрмөлөр: 1. Биз @RestControllerди контроллер катары белгилеген класс түздүк. ага жол @RequestMapping ("/ спекуляция") – бул annotation милдеттүү эмес; ансыз жол "/" менен башталат. 2. Биз методду түздүк, ал аткарылганда сапты (Light GET сурамы) кайтарып, аны @GetMapping annotationсы менен белгилеген (бул ыкма атайын GET сурамдары үчүн) жана методго баруучу жолду көрсөткөн ("/жөнөкөй") 3. Биз долбоорду (serverди) 8080 портунда ишке киргиздик жана төмөнкү дарекке GET суроо-талабын жасадык: server/controller/method (http://localhost:8080/speculation/simple) 4. Коомдук сап simple(){ кайтуу "Easy GET суроочу" ыкмасы бул суроо үчүн иштеген; } 5. Методдун натыйжасы "Easy GET талабы" сабы түрүндө браузерге кайтарылды. Ооба, бул башталышы! Сизди эң ​​кызыктуу макалалар күтөт. Жогоруда сунуш кылынган материалды өздөштүрүү бир күндөн ашык убакытты талап кылат, бул жерде шашуунун кереги жок, бул тема абдан маанилүү жана түшүнүү керек, "пилди бөлүктөргө бөлүп жегиле". Окутуу үчүн (материалды өздөштүргөндөн кийин): Спекуляцияны колдонуу контроллерин толтуруңуз . Методдорду түзүү: 1) продуктту id боюнча издөө productService.findById() ыкмасын колдонуңуз; Мисал чыгаруу
{
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": null,
        "salePrice": null
 }
Калган контроллердин ыкмаларын ишке ашыргандан кийин, ойлонуп көрүңүз: "Эмне үчүн акыркы эки талаа жараксыз? Ал жерде кандайдыр бир баалуулуктар болушу үчүн эмне кылуу керек?" 2) Дүкөндүн маңдайкы жагында бардык өнүмдөрдү көрүү: Бардык өнүмдөрдү издөө үчүн productService.findAll() ыкмасын колдонуңуз; Таңгактоо жана белгилөө талааларын толтуруу үчүн productService.pack(); productService.makeMoney(); Чыгуу JSON массивинин листинг өнүмдөрүн камтышы керек, мисалы:
[
    {
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 100
    },
    {
        "id": 2,
        "name": "Морковь",
        "purchasePrice": 14,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 70
    }
]
3) Жаңы продуктуну маалымат базасына кошуу (продукцияны кошуу: капуста жана дүң сатып алуу баасы) Колдонуу: productService.save(); Метод тиешелүү Http абалын кайтарышы керек. 4) Өнүмдү id боюнча өчүрүү Бул үчүн, адегенде ProductServiceде productRepository.deleteById ( ); Анан аны контроллерде колдонуңуз. Контроллер ыкмасы тиешелүү Http статусун кайтарышы керек. 5) Идентификатор боюнча товардын өзгөрүшү (продукциянын дүң баасын жана товардын аталышын өзгөртүү) Бул операция мурункуларга караганда татаалыраак болот. Адегенде id менен өзгөрткүбүз келген продуктуну табышыбыз керек Use productService.findById(); Андан кийин, табылган продуктта (an object) талаалардын маанисин Put сурамынын денесинде (json_object) алынган an objectтин талааларынын мааниси менен алмаштырыңыз. Муну төмөнкүдөй кылса болот:
найденный_товар = productService.findById(id);
найденный_товар.setName(an object_json.getName);
найденный_товар.setPurchasePrice(an object_json.getPurchasePrice);
Андан кийин, өзгөртүлгөн продукт сакталышы керек productService.save(found_product); Метод тиешелүү Http абалын кайтарышы керек. Эгерде сизде бул ыкма менен көйгөйлөр болсо, анда сиз Google'дан "put request java" издесеңиз болот, Интернетти азырынча эч ким жокко чыгара элек) Контроллер менен иштөө муну менен эле бүтпөйт, алдыда дагы көптөгөн темалар бар...
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION