RESTful URL Design dizaynını axtarın

Axtarışları RESTful URL kimi təqdim etmək üçün ağlabatan bir yol axtarıram.

Setting: Məndə avtomobillər qarajlarda ola biləcək iki model, avtomobil və qarajlar var. Mənim URL-lərim belədir:

 /car/xxxx xxx == car id returns car with given id /garage/yyy yyy = garage id returns garage with given id 

Avtomobil özündən (burada / avtomobildən) mövcud ola bilər və ya qarajda mövcud ola bilər. Təsəvvür etmək üçün doğru yol nədir, demək, bir qarajda olan bütün maşınlar? Kimi bir şey:

 /garage/yyy/cars ? 

Necə yyy və zzz qarajında ​​avtomobil birləşdirmək haqqında?

Müəyyən xüsusiyyətləri olan avtomobilləri axtarmağın doğru yolu nədir? De ki: 4 qapı ilə bütün mavi sedanları göstərin:

 /car/search?color=blue> 

və ya əvəzinə avtomobil olmalıdır?

"Axtarış" dan istifadə etmək qeyri-münasib görünür - ən yaxşı şəkildə / müddət nədir? Olmalıdır:

 /cars/?color=blue> 

Axtarış parametrləri PATHINFO və ya QUERYSTRING hissəsi ola bilərmi?

Bir sözlə, mən çapraz model dizayn REST url üçün yaxşı bir kılavuz / tutorial axtarıram və axtarış edə bilərsiniz.

[Yenile] Justin'in cavabını çox sevirəm, ancaq bir çox axtarışı əhatə etmir:

 /cars/color:blue/type:sedan/doors:4 

və ya belə bir şey. Biz necə hərəkət edəcəyik

 /cars/color/blue 

birdən çox sahənin işi üçün?

364
16 окт. Parand 16 oktyabrda təyin olundu . 2008-10-16 07:51 '08 at 07:51 2008-10-16 07:51
@ 12 cavab

Axtarış üçün querystrings istifadə edin. Bu böyük bir RESTful:

 /cars?color=blue> 

Daimi sorğuların üstünlüyü, onlar standart və geniş şəkildə başa düşüldükləri və bir formada əldə oluna biləcəyidir.

375
04 июля '09 в 10:13 2009-07-04 10:13 Cavab pbreitenbach'a 04 iyul '09 'da 10:13' da verildi 2009-07-04 10:13

RESTful URL dizaynı bir quruluşa əsaslanan bir qaynaq xəritəsidir (bir qovluq kimi quruluş, tarix: məqalələr / -id , obyekt və atributlar, ..), slash / hiyerarşik strukturu göstərir, -id istifadə edir.

Hiyerarşik quruluş

Üstünlük verirəm:

 /cars?color=blue;type=sedan #most prefered by me /cars;color-blue+doors-4+type-sedan #looks good when using car-id /cars?color=blue #I don't recommend using > 

Və ya əsasən yuxarıda təsvir olunduğu kimi bir çubuq deyil hər şey.
Formula: /cars[?;]color[=-:]blue[,;+> , * baxmayaraq ki, > işarəsi istifadə etmirəm, çünki ilk baxışdan mətndən fərqlənmir.

** Bir JSON obyektinin URI-ə keçməsinin RESTful olduğunu bilirdinizmi? **

Seçim siyahıları

CSS3 atributlarının ardıcıllığına baxın. Məsələn, bar user*=bar olan istifadəçiləri axtarın.) 

Nəticə

Hər halda, bu sizin üçün ən mühüm hissə ola bilər, çünki bunu istədiyiniz şəkildə edə bilərsiniz, yalnız RESTful URI-nin asanlıqla başa düşülən bir quruluş olduğuna diqqət yetirin . /directory/file , /collection/node/item , tarix /articles/{year}/{month}/{day} . Sonuncu seqmentlərdən birini atdığınızda dərhal nə əldə etdiyini bilirsiniz.

Beləliklə, bütün bu simvolların unencoded icazə verilir :

  • a-zA-Z0-9_.-~
  • qorunur :; ;/?:@=>
  • etibarsız *: <>"#%{}|\^~[]`

* Niyə təhlükəsizdir və kodun daha yaxşı olması səbəbindən: RFC 1738 sm 2.2

RFC 3986 bax 2.2
Daha əvvəl söylədiyimə baxmayaraq, ölçümler arasında ümumi bir fərq var, buna görə bəziları başqalarından daha vacibdir.

  • ümumi məhdudiyyətlər: :/?#[]@
  • alt-delimeters:! !$> ,; !$>

Daha çox məlumat:
Hiyerarşi: bax 2.3 , bax 1.2.3
URL yolu parametri sözdizimi
CSS3 xüsusiyyətləri eşleme
IBM: RESTful Web Services - əsasları
Qeyd: RFC 1738 RFC 3986-a yeniləndi.

106
15 марта '13 в 16:10 2013-03-15 16:10 Cavab Qwerty tərəfindən 15 Mart 'da 16:10' də verilir 2013-03-15 16:10

Yolun variantları bir sıra üstünlüklərə baxmayaraq, IMO, bəzi kilolu faktorlar var.

  • URL'de bir axtarış sorğusu üçün lazım olan bütün simvollara icazə verilmir. Çox punctuation marks və Unicode simvol URL-də bir sorgu dizesi parametresi olaraq kodlanmalıdır. Eyni problemlə mübarizə edirəm. XPath-i URL-də istifadə etmək istərdim, lakin bütün XPath sözdizimi URI konturu ilə uyğun deyil. Buna görə, sadə /cars/doors/driver/lock/combination yolları üçün, sürücü qapısının XML sənədindəki ' combination ' elementini tapmaq məsləhətdir. Lakin /car/doors[id='driver' and lock/combination='1234'] çox dost deyil.

  • Özniteliklerinden birine dayanan bir kaynağı filtreleme ve kaynak belirtme arasında bir fark var.

    Məsələn, çünki

    /cars/colors bütün maşınlar üçün bütün rənglərin siyahısını qaytarır (qaynaqlanan resurs rəngli obyektlərin bir sıra)

    /cars/colors/red,blue,green , bir avtomobil kolleksiyası deyil, qırmızı, mavi və ya yaşıl rəngli obyektlərin siyahısını qaytaracaq.

    Avtomobilləri geri qaytarmaq üçün yol olacaq

    /cars?color=red,blue,green və ya /cars/search?color=red,blue,green

  • Adı / dəyər cütləri adın / dəyər cüt olmayan yolun qalan hissəsindən təcrid edilmədiyindən yolda parametrlər oxumaq daha çətindir.

Son şərh. /garages/yyy/cars /garage/yyy/cars /garages/yyy/cars (hər zaman çoxluq) /garage/yyy/cars (ehtimal ki, orijinal cavabda bir typo idi), çünki tək və plural arasındakı yolu dəyişdirməyi qarşısını alır. Əlavə olan sözlər üçün dəyişiklik belə pis deyil, lakin /person/yyy/friends /people/yyy dəyişməsi çətin görünür.

34
29 мая '09 в 18:48 2009-05-29 18:48 Cavab Doug Domeny tərəfindən 29 may 09: 09-da 18:48, 2009-05-29 18:48 tarixində verilir

Peterin cavabını genişləndirmək üçün, axtarışın birinci sinif bir qaynağı edə bilərsiniz:

 POST /searches # create a new search GET /searches # list all searches (admin) GET /searches/{id} # show the results of a previously-run search DELETE /searches/{id} # delete a search (admin) 

Resurs axtarışında rənglər, modellər, qaraj vəziyyəti və s. Sahələr var. və XML, JSON və ya digər formatda göstərilə bilər. Bir Avtomobil və Qaraj qaynağı olaraq, identifikasiya əsasında axtarış tələblərinə çıxış məhdudlaşdıra bilərsiniz. Tez-tez eyni axtarış sorgularını açan istifadəçilər, onları yenidən yaratmaq lazım deyil ki, onları profillərinə saxlaya bilər. URL'ler kifayət qədər qısa olacaq ki, bir çox hallarda elektron poçtla asanlıqla satıla bilər. Bu xilas axtarışlar xüsusi RSS feedsinin əsasları və s. Ola bilər.

Resursları düşündüyünüz zaman axtarışları istifadə etmək üçün bir çox imkan var.

Bu fikir bu Railscast-da ətraflı şəkildə izah olunur.

30
29 мая '09 в 19:03 2009-05-29 19:03 cavab May 29 '09 da 19:03 'da Rich Apodaca tərəfindən verilmişdir 2009-05-29 19:03

Justin'in cavabı yəqin ki, yəqin ki, bəzi tətbiqlərdə müəyyən bir axtarışı müstəqil bir resurs hesab etmək məcburiyyətində olsa da, məsələn, yadda qalan axtarışları dəstəkləmək istəyirsinizsə:

 /search/{searchQuery} 

və ya

 /search/{savedSearchName} 
11
16 окт. Cavab 16 oktyabrda Peter Hilton tərəfindən verilir . 2008-10-16 13:52 '08 at 13:52 pm 2008-10-16 13:52

Bu bir REST deyil. API içindəki resurslar üçün URI-i müəyyən edə bilməzsiniz. Resurs naviqasiyası hipertext ilə idarə olunmalıdır. Gözəl URI və ağır əlaqələrə ehtiyacınız varsa, bu yaxşıdır, ancaq REST-i çağırmayın, çünki bu RESTful architecture-in məhdudiyyətlərini birbaşa pozur.

REST ixtiraçıları tərəfindən məqalə məqalələrinə baxın.

5
20 июля '09 в 21:52 2009-07-20 21:52 cavab iyul ayının 20-də saat 21:52 da verilir

Axtarışı həyata keçirmək üçün iki yanaşma istifadə edirəm.

1) Sadə iş, bağlı maddələrlə bağlı sorğu və getmək üçün.

  /cars?q.garage.id.eq=1 

Bu deməkdir ki, qaraj ID ilə avtomobil 1-ə bərabərdir.

Daha mürəkkəb sorgular yaratmaq da mümkündür:

  /cars?q.garage.street.eq=FirstStreet> 

Bütün birinciStreet qarajları, qırmızı olmayan avtomobil (3-cü səhifə, hər səhifədə 100 ədəd).

2) Kompleks sorgular yaradılmış və bərpa edilə bilən adi qaynaqlar kimi qəbul edilir.

  POST /searches => Create GET /searches/1 => Recover search GET /searches/1?offset=300 => pagination in search 

Axtarış yaratmaq üçün POST quruluşu aşağıdakılardır:

  { "$class":"test.Car", "$q":{ "$eq" : { "color" : "red" }, "garage" : { "$ne" : { "street" : "FirstStreet" } } } } 

Grails (DSL) meyarlarına əsaslanır: http://grails.org/doc/2.4.3/ref/Domain%20Classes/createCriteria.html

4
10 окт. İstifadəçi tərəfindən cavab verildi2108278 Oct 10. 2014-10-10 17:23 '14 at 17:23 2014-10-10 17:23

Mən Justinin cavabını istəyirəm, baxmayaraq ki, o, axtarışın deyil, filterin daha dəqiq təmsil etdiyini hiss edirəm. Kamera ilə başlayan maşınlarla tanış olmaq istəsən nə olar?



Gördüyüm kimi, müəyyən resursları idarə etdiyiniz şəkildə yarada bilərsiniz:

/ Avtomobil / F *



Və ya sadəcə onu filtrə əlavə edə bilərsiniz:

/ Avtomobil / Qapılar / 4 / Ad / Cam * / Rəng / Qırmızı, Mavi, Yaşıl



Şəxsən, sonuncunu üstün tuturam, amma heç bir REST mütəxəssisi deyiləm (ilk 2 və ya daha çox həftə bundan əvvəl bunu eşitdim ...)

1
04 марта '09 в 18:02 2009-03-04 18:02 cavab 04 mart 04: 09-da saat 18: 00-da verilir

Bundan əlavə, mən də təklif edəcəyəm:

 /cars/search/all{?color,model,year} /cars/search/by-parameters{?color,model,year} /cars/search/by-vendor{?vendor} 

Burada Search Cars resursunun uşaq resursu hesab olunur.

0
13 янв. cavab aux 13 jan tərəfindən verilir . 2016-01-13 00:49 '16 'da 0:49 2016-01-13 00:49

İşiniz üçün bir çox yaxşı seçim var. Lakin POST orqanını istifadə etməlisiniz.

Sorgu dizesi misal üçün idealdır, ancaq, məsələn, daha mürəkkəb bir şey varsa. Elementlərin uzunmüddətli siyahısı və ya məntiqi şərti ifadələrdən istifadə edərək, poçtu POST vasitəsilə göndərən bir sənəd kimi bir məktub təyin edə bilərsiniz.

Bu, axtarışın daha çevik təsvirinə imkan verir və həmçinin serverin URL'sinin uzunluğunu məhdudlaşdırır.

0
15 сент. cavab estani 15 sep verilir . 2017-09-15 17:45 '17 17:45 'də 2017-09-15 17:45

RESTful, URL / avtomobillərdə / axtarışlarda fe'llərdən istifadə etməyi tövsiyə etmir. API-ni filtreləmək / axtarış / paginate etmək üçün doğru yol sorğu parametrləri ilə həyata keçirilir. Ancaq norma pozmaq lazım olan zamanlar ola bilər. Məsələn, birdən çox resursda axtarış aparırsanız, / q kimi bir şey istifadə etməlisiniz? Sorgu = /

Ən yaxşı API inkişaf metodlarını anlamaq üçün http://saipraveenblog.wordpress.com/2014/09/29/rest-api-best-practices/ səhifəsindən keçə bilərsiniz. RESTful API

0
06 окт. java_geek tərəfindən verilmiş cavab 06 oktyabr 2014-10-06 09:53 '14 da 9:53 2014-10-06 09:53

Mənim məsləhətim:

 /garages Returns list of garages (think JSON array here) /garages/yyy Returns specific garage /garage/yyy/cars Returns list of cars in garage /garages/cars Returns list of all cars in all garages (may not be practical of course) /cars Returns list of all cars /cars/xxx Returns specific car /cars/colors Returns lists of all posible colors for cars /cars/colors/red,blue,green Returns list of cars of the specific colors (yes commas are allowed :) ) 

Düzenle:

 /cars/colors/red,blue,green/doors/2 Returns list of all red,blue, and green cars with 2 doors. /cars/type/hatchback,coupe/colors/red,blue,green/ Same idea as the above but a lil more intuitive. /cars/colors/red,blue,green/doors/two-door,four-door All cars that are red, blue, green and have either two or four doors. 

Bu fikri ümid edirəm. Əslində, Rest API'sı asanlıqla axtarış ediləcək və məlumatlarınızı nəzərdən keçirmək üçün imkan verməlidir. Sorgu dizgelerinden daha çox URL'lerin kullanılması bir avantajı, HTTP trafiği üçün web sunucusunda var olan kendi önbellekleme mekanizmalarını kullanmanızdır.

RESTdə sorğu sətrinin qüsurlarını təsvir edən səhifəyə istinad edir: http://web.archive.org/web/20070815111413/http://rest.blueoxen.net/cgi-bin/wiki.pl?QueryStringsConsideredHarmful

Mən Google önbelleğini istifadə etdim, çünki adi səhifə mənim üçün burada işləmədiyi üçün, bu link: http://rest.blueoxen.net/cgi-bin/wiki.pl?QueryStringsConsideredHarmful

-3
16 окт. Cavab 16 oktyabrda Justin Bozonier tərəfindən verilir . 2008-10-16 08:03 '08 saat 08:03 'de 2008-10-16 08:03

etiketləri ilə bağlı digər suallar və ya bir sual