2013-11-14 13 views
6

Udostępniam interfejs API HTTP przez Play, a w celu zarządzania zmianami powodującymi łamanie zgodności adres URL zawiera numer wersji. Obecnie wygląda to następująco:Brak przechwytywania symboli wieloznacznych w ścieżkach Play Framework

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

Po wprowadzeniu zmiany w wyjściu jednej z metod, chciałbym wesprzeć v2. Jednak w przypadku większości metod zachowanie jest identyczne, więc nie obchodzi mnie, która wersja jest używana. Próbowałem zmodyfikować powyższą linię do:

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

Ale Odtwarzanie nie skompilować ten, z błędem Missing parameter in call definition: version.

I wiem Nie użyłem parametru version w wywołaniu - ponieważ nie musiałem! Czy istnieje rozsądny sposób na osiągnięcie tego, co chcę tutaj, albo aby Play pomijał tę kontrolę, czy też umieścił znak wieloznaczny na trasie, która nie jest przechwytywana jako parametr?

(Przypuszczam, że jeśli nie mogę dodać parametr do definicji metody, a następnie ignorować. Ale wolałbym tego uniknąć, jeśli to możliwe).

Odpowiedz

5

Po bawił się z tym na chwilę, próbując znaleźć obejścia, podejrzewam, że może nie być to możliwe.

Duży punkt przyklejania to odwrócone trasowanie. Play chce, aby możliwe było korzystanie z @routes.com.foo.Api.someMethod w moich szablonach i rozwiązywanie go pod adresem URL, który wywołałby tę metodę. (I faktycznie robię to w moich dokumentach API). Jeśli któraś z powyższych propozycji zostanie zaakceptowana, będzie to arbitralne, jaki faktyczny adres URL odpowiadał danej metodzie.

Przypuszczam, że tak naprawdę chcę, aby metoda miała kanoniczny adres URL, ale dla innych podobnych wzorców należy uważać za dopasowanie. Zgadzam się, że Play nie oferuje tego jako część względnie prostej składni plików tras i ja sam musiałbym to zrobić (np. Za pomocą dwóch wzorców, z użyciem symbolu wieloznacznego, ale ostatecznie nie wywołującego tej samej metody).

Powiązane problemy