2013-11-14 27 views
6

Play aracılığıyla bir HTTP API'yi açığa vuruyorum ve uyumluluk bozan değişiklikleri yönetmek için, URL sürüm numarasını içerir. Şu anda bu aşağıdaki gibidir: I yöntemlerinden birinin çıkışına bir değişiklik tanıtmak gibiPlay Framework rotalarında yakalamayan joker karakterler

GET /api/v1/someMethod  com.foo.Api.someMethod() 

, ben v2 desteklemek istiyorum. Ancak, yöntemlerin çoğunda, davranış aynıdır, bu yüzden hangi sürümün kullanıldığına aldırmam. Ben yukarıdaki satırı değiştirmeye çalıştı:

GET /api/v:version/someMethod  com.foo.Api.someMethod() 

Ama Çal hatası Missing parameter in call definition: version ile bu derlenmeyecektir.

I biliyorum Aramak için sürüm parametresini kullanmamıştım - çünkü ihtiyacım olmadı! Burada yaptığım şeyi elde etmek için, ya bu kontrolü atlamak için Oynat'ı almak için, ya da bir parametre olarak yakalanmayan bir joker karakteri koymak için mantıklı bir yol var mı?

(Ben ben metod tanımına parametre eklemek eğer varsayalım ve daha sonra bunu görmezden. Ama doğrusu mümkünse. Bunu önlemek istiyorum) Bir süredir bu ile yaklaşık oynadı

cevap

5

bulmaya çalışırken Geçici çözümler, bunun mümkün olabileceğinden şüpheleniyorum.

Büyük yapışma noktası ters yönlendirme'dir. Play, şablonumda @routes.com.foo.Api.someMethod'u kullanabilmem ve bu yöntemi çağırmak için URL'ye çözümlenebilmenin mümkün olmasını istiyor. (Ve aslında bunu API belgelerimde yapıyorum). Yukarıdaki tekliflerimden herhangi biri kabul edilmek istendiyse, gerçek URL'nin yönteme karşılık geldiği keyfi olabilir.

Gerçekten istediğim, yöntemin kanonik URL'ye sahip olması, ancak diğer benzer desenlerin de bir eşleşme olarak görülmesidir. Play'in bunu göreceli olarak basit yolların söz diziminin bir parçası olarak sunmadığını kabul ediyorum ve bunu kendim gerçekleştirmek zorundayım (örneğin, iki karakteri kullanarak, en sonunda joker karakteriyle ancak doğrudan aynı yöntemi çağırmaksızın).

İlgili konular