2010-09-06 20 views
11

tôi đọc rằng cách HTTP để vượt qua một mảng trong một yêu cầu là để thiết lập một tham số nhiều lần:JAX-RS/Rest: Đặt tham số nhiều lần hoặc sử dụng thông số phân cách bằng dấu phẩy duy nhất?

1) GET /users?orderBy=last_name&orderBy=first_name 

Tuy nhiên, tôi cũng đã nhìn thấy các thông số dấu phẩy phân cách (và tôi cảm thấy đây là "sạch hơn "):

2) GET /users?orderBy=last_name,first_name 

Tôi muốn triển khai đa phân loại (sắp xếp người dùng theo last_name, sau đó trùng lặp last_names được sắp xếp theo first_name). Code-khôn ngoan, điều này là dễ dàng (thư viện của Google để giải cứu), nhưng làm thế nào tôi nên tiếp xúc với điều này? Liệu cách đầu tiên thậm chí còn giữ trật tự của các trường (sắp xếp theo last_name, sau đó bởi first_name)?

mùa xuân kỳ diệu sẽ chuyển đổi một tham số vào một [] mảng String, nếu nó được đặt nhiều lần trong các yêu cầu:

... @RequestParam("orderBy") String[] orderBy ... becomes ["last_name","first_name"] 

Điều này dẫn tôi để tin rằng cách đầu tiên được coi là thực hành tốt nhất, mặc dù tôi giống như cách thứ hai ...

+0

Điều này tùy thuộc vào người bạn nhận được @RequestParam của bạn từ. Tuy nhiên, nó có thể được chỉ định trong tiêu chuẩn JAX-RS. – bmargulies

Trả lời

4

Tôi nghĩ đó là vấn đề về ý kiến. JAX-RS cho phép bạn có các thông số như:

@QueryParam("orderBy") List<String> orderBy 

mà tôi nghĩ sẽ làm tương tự như Mùa xuân về phần "chuyển đổi kỳ diệu". Tôi không nhất thiết nghĩ rằng đây là dấu hiệu của một "thực hành tốt nhất" hay không. Nó chỉ là một số tham số có thể có nhiều giá trị và khung công tác cho phép bạn đọc nhiều giá trị đó (nghĩ rằng một số biểu mẫu HTML nhất định).

Cá nhân, tôi sẽ sử dụng một giá trị duy nhất được phân tách bằng dấu phẩy. Nó "sạch hơn" như bạn đã nói và giá trị dễ xây dựng hơn (bạn không dựa vào thứ tự khóa/giá trị tham số có thể dẫn đến một số rắc rối cho các nhà phát triển ứng dụng khách).

+2

Cách tiếp cận này sẽ trả về Danh sách với một phần tử "last_name, first_name" trong đó. Phải không? – Normal

+0

@Nói tôi có nghĩa là danh sách ví dụ dòng mã sẽ gần với những gì Spring cung cấp. Tôi không chắc liệu thông số JAX-RS đã được làm rõ để bảo tồn trật tự chưa (và tôi tin rằng hầu hết các triển khai hiện nay). Giá trị duy nhất được phân tách bằng dấu phẩy là một phương pháp thay thế (và nếu bạn kết hợp cả Danh sách và chuỗi đơn được phân tách bằng dấu phẩy, bạn sẽ chỉ nhận được một phần tử như bạn đã nhận xét). Nhìn lại, cách tiếp cận Danh sách với "NHẬN/người dùng? OrderBy = last_name & orderBy = first_name" cũng tốt và có nhiều cách tiếp cận tiêu chuẩn hơn trong các khung ngôn ngữ khác. –

13

Phương pháp đầu tiên là cách được ưu tiên, tiêu chuẩn.

Bạn chắc chắn có thể sử dụng cách thứ hai, nhưng bạn sẽ phải triển khai cách riêng của bạn để mã hóa giá trị tham số yêu cầu, với tất cả các vấn đề liên quan. Ví dụ: hãy xem xét điều gì sẽ xảy ra nếu một trong các giá trị của bạn chứa ký tự ','.

Bởi vì đầu tiên là khá chuẩn, nó có lợi ích của việc lắp ghép độc đáo với jax-rs và khung công tác xác thực; bởi vì chúng tôi luôn xác nhận đầu vào của mình, đúng không? ;)

+1

Đơn đặt hàng rất quan trọng đối với yêu cầu OP nhưng tôi không nghĩ rằng đơn đặt hàng được đảm bảo bằng thông số kỹ thuật. Vì vậy, phương pháp đầu tiên là không đáng tin cậy và không nên được sử dụng. – Dojo

Các vấn đề liên quan