GitHub

0
508

Xin lưu ý rằng GitHub không còn hỗ trợ các phiên bản Internet Explorer 7 hoặc 8.
Nếu bạn đang sử dụng IE 11, hãy chắc chắn rằng bạn tắt “Compatibility View”
Chọn một URL clone
HTTPS (khuyến cáo) Clone với Git hoặc thanh toán với SVN sử dụng địa chỉ web của kho lưu trữ.
HTTPS
Nho là gì?
Nho là một khuôn khổ giống như phần còn lại API cho Ruby. Nó thiết kế để chạy trên Rack hoặc bổ sung cho các khuôn khổ hiện có ứng dụng web như Ray và Sinatra bằng cách cung cấp một DSL đơn giản để dễ dàng phát triển API yên tĩnh. Nó đã được xây dựng trong hỗ trợ cho hội nghị phổ biến, bao gồm nhiều định dạng, giới hạn tên miền phụ/tiền tố, nội dung đàm phán, versioning và nhiều hơn nữa.
Bản ổn định
Bạn đang đọc tài liệu hướng dẫn cho việc phát hành tiếp theo của nho, nên là 0.16.3. Xin vui lòng đọc nâng cấp khi nâng cấp từ phiên bản trước. Việc phát hành ổn định hiện nay là 0.16.2
Cài đặt
Nho có sẵn như là một đá quý, để cài đặt nó chỉ cần cài đặt các đá quý:
đá quý cài đặt nho
đá quý ‘nho’
Cách sử dụng cơ bản
Nho API là Rack các ứng dụng được tạo ra bởi subclassing Grape::API. Dưới đây là một ví dụ đơn giản, Hiển thị một số các tính năng phổ biến hơn của nho trong bối cảnh tái tạo các bộ phận của Twitter API.
Mô-đun hạng Twitter API < grape::api="" phiên="" bản="" 'v1',="" bằng="" cách="" sử="" dụng::="" tiêu="" đề,="" nhà="" cung="" cấp:="" 'twitter'="" định="" dạng:="" tiền="" tố="" json:="" api="" người="" trợ="" giúp="" làm="" def="" current_user="" @current_user="User.authorize!" xác="" thực="" (env)="" kết="" thúc="" def!="" lỗi!="" ('401="" trái="" phép',="" 401)="" trừ="" khi="" current_user="" cuối="" cùng="" kết="" thúc="" tài="" nguyên:="" trạng="" thái="" làm="" desc="" 'trở="" lại="" một="" thời="" gian="" biểu="" công.'="" get:="" public_timeline="" làm="" status.limit(20)="" kết="" thúc="" desc="" 'trở="" về'="" một="" thời="" gian="" biểu="" cá="" nhân.="" get:="" home_timeline="" xác="" nhận!="" current_user.statuses.limit(20)="" kết="" thúc="" desc="" 'trở="" lại'="" trạng="" thái="" bản.="" chủ="" yêu="" cầu:="" id,="" loại:="" số="" nguyên,="" desc:="" 'tình="" trạng="" id'="" kết="" thúc="" route_param:="" id="" được="" làm="" (params:id)="" kết="" thúc="" thúc="" desc="" 'tạo="" ra="" một="" tình="" trạng.'="" chủ="" yêu="" cầu:="" trạng="" thái,="" loại:="" chuỗi,="" desc:="" 'của="" tình="" trạng.'="" đăng="" bài="" cuối="" cùng="" xác="" nhận!="" status.create!="" (người="" dùng:="" current_user,="" văn="" bản:="" params:status)="" kết="" thúc="" desc="" 'cập="" nhật="" tình="" trạng="" một.'="" chủ="" yêu="" cầu:="" id,="" loại:="" chuỗi,="" desc:="" 'tình="" trạng="" bạn.'="" yêu="" cầu:="" trạng="" thái,="" loại:="" chuỗi,="" desc:="" '="" của="" bạn="" tình="" trạng.="" 'kết="" thúc="" đặt':="" id'="" xác="" thực!="" current_user.="" (params:id)="" .update="" (người="" dùng:="" current_user,="" văn="" bản:="" params:status)="" kết="" thúc="" desc="" 'xoá'="" một="" trạng="" thái.="" chủ="" yêu="" cầu:="" id,="" loại:="" chuỗi,="" desc:="" 'tình="" trạng="" id.'="" sẽ="" xóa="" ':="" id'="" xác="" nhận!="" current_user.="" (params:id)="" .destroy="" kết="" thúc="" cuối="" cùng="" cuối="" cùng="" kết="" thúc="" lắp="" ráp="" rack="" các="" mẫu="" ở="" trên="" tạo="" ra="" một="" ứng="" dụng="" giá="" đỡ="" có="" thể="" được="" chạy="" từ="" một="" tập="" tin="" rackup="" với="" rackup:="" chạy="" twitter::api="" nhận="" được="" pi/statuses/public_timeline="" get/api/trạng="" thái/home_timeline="" nhận="" được="" pi/trạng="" thái="" id="" bài/api/trạng="" thái="" đặt="" pi/trạng="" thái="" id="" xóa="" pi/trạng="" thái="" id="" nho="" cũng="" tự="" động="" sẽ="" đáp="" ứng="" đầu="" và="" lựa="" chọn="" cho="" tất="" cả="" có="" được,="" và="" chỉ="" cần="" lựa="" chọn="" cho="" tất="" cả="" các="" tuyến="" đường="" khác.="" activerecord="" không="" có="" lan="" can="" nếu="" bạn="" muốn="" sử="" dụng="" activerecord="" trong="" nho,="" bạn="" sẽ="" cần="" phải="" đảm="" bảo="" rằng="" kết="" nối="" của="" activerecord="" ngoài="" trời="" được="" xử="" lý="" một="" cách="" chính="" xác.="" cách="" dễ="" nhất="" để="" đạt="" điều="" đó="" là="" bằng="" cách="" sử="" dụng="" của="" activerecord="" connectionmanagement="" trung="" gian="" ở="" của="" bạn="" trước="" khi="" lắp="" nho,="" ví="" dụ="" như:="" sử="" dụng="" activerecord::connectionadapters::connectionmanagement="" chạy="" twitter::api="" cùng="" với="" sinatra="" (hoặc="" khung="" hình="" khác)="" nếu="" bạn="" muốn="" để="" mount="" nho="" cùng="" với="" một="" rack="" khung="" như="" sinatra,="" bạn="" có="" thể="" làm="" một="" cách="" dễ="" dàng="" bằng="" cách="" sử="" dụng="" rack::cascade:="" #="" ví="" dụ="" cần="" 'sinatra'="" đòi="" hỏi="" 'nho'="" lớp="" api="">< grape::api="" nhận:="" xin="" chào="" xin="" chào:="" 'thế="" giới'="" kết="" thúc="" lớp="" web="">< sinatra::base="" nhận="" được="" '="" do="" 'xin="" chào="" thế="" giới.'="" kết="" thúc="" cuối="" cùng="" sử="" dụng="" rack::session::cookie="" chạy="" rack::="" api,="" web="" đường="" ray="" api="" nơi="" các="" tập="" tin="" vào="" ứng="" dụng/api.="" lan="" can="" dự="" kiến="" sẽ="" phù="" hợp="" với="" tên="" của="" các="" mô-đun="" ruby="" và="" tên="" tệp="" khớp="" với="" tên="" của="" thư="" mục="" concác="" lớp="" học.="" trong="" ví="" dụ="" của="" chúng="" tôi,="" các="" vị="" trí="" tên="" tệp="" và="" thư="" mục="" cho="" twitter::api="" nên="" được="" ứng="" dụng/api/twitter="" sửa="" đổi:="" sửa="" đổi="" cấu="" hình/tuyến="" đường:="" mount="" twitter::api=""> ‘/’
Ngoài ra, nếu phiên bản Rails bạn là 4.0 + và sử dụng các ứng dụng mặc định mô hình lớp của ActiveRecord, bạn sẽ muốn sử dụng hashie-forbidden_attributes đá quý đá quý này vô hiệu hóa tính năng bảo mật của strong_params tại các mô hình lớp, cho phép bạn sử dụng của nho params xác nhận để thay thế.
# Đá quý Gemfile ‘hashie-forbidden_attributes’
Xem dưới đây để bổ sung mã cho phép nạp các API thay đổi trong sự phát triển.
Mô-đun
Bạn có thể gắn kết nhiều API triển khai bên trong một số khác. Đây không phải là phiên bản khác nhau, nhưng có thể là thành phần của cùng một API.
lớp Twitter::API < grape::api="" mount="" twitter::apiv1="" mount="" twitter::apiv2="" cuối="" bạn="" cũng="" có="" thể="" gắn="" trên="" một="" con="" đường,="" mà="" là="" tương="" tự="" như="" sử="" dụng="" các="" tiền="" tố="" bên="" trong="" api="" gắn="" chính="" nó.="" lớp="" twitter::api="">< grape::api="" mount="" twitter::apiv1=""> ‘ / v1’ kết thúc
Versioning
Có bốn chiến lược trong đó khách hàng có thể tiếp cận với hai điểm cuối của bạn API:: đường dẫn,: tiêu đề,: accept_version_header và: param. Chiến lược mặc định là: con đường.
Đường dẫn
Phiên bản ‘v1’, bằng cách sử dụng:: con đường
Sử dụng chiến lược versioning này, khách hàng phải vượt qua phiên bản bạn muốn trong URL.
Curl: 9292/v1/trạng thái/public_timeline
Phiên bản ‘v1’, bằng cách sử dụng:: tiêu đề, nhà cung cấp: ‘twitter’
Hiện nay, nho chỉ hỗ trợ các loại phương tiện truyền thông versioned ở định dạng sau:
VND.Vendor-và-hoặc-tài nguyên-v1234 + định dạng
Về cơ bản tất cả các thẻ giữa final – và + sẽ được hiểu là các phiên bản.
Sử dụng chiến lược versioning này, khách hàng phải vượt qua phiên bản bạn muốn trong phần đầu HTTP Accept.
Curl -H chấp nhận: ứng dụng / vnd.twitter-v1 + json: trạng thái-9292-public_timeline
Theo mặc định, phù hợp với phiên bản đầu tiên được sử dụng khi không có tiêu đề chấp nhận được cung cấp. Hành vi này là tương tự như định tuyến đường ray. Để phá vỡ hành vi mặc định này, người ta có thể sử dụng các: lựa chọn nghiêm ngặt. Khi tùy chọn này được đặt thành true, một 406 không được chấp nhận lỗi được trả lại khi không có tiêu đề chấp nhận đúng được cung cấp.
Khi một tiêu đề chấp nhận không hợp lệ được cung cấp, một 406 không được chấp nhận lỗi được trả lại nếu các: cascade tùy chọn được thiết lập để sai. Nếu không một 404 Không tìm thấy lỗi được trả lại bởi Rack nếu không có con đường khác phù hợp với.
Phiên bản chấp nhận tiêu đề
Phiên bản ‘v1’, bằng cách sử dụng:: accept_version_header
Sử dụng chiến lược versioning này, khách hàng nên vượt qua các phiên bản bạn muốn trong các tiêu đề HTTP Accept-Phiên bản.
Curl -H “chấp nhận-phiên bản: v1”: trạng thái-9292-public_timeline
Theo mặc định, phù hợp với phiên bản đầu tiên được sử dụng khi không có tiêu đề chấp nhận phiên bản được cung cấp. Hành vi này là tương tự như định tuyến đường ray. Để phá vỡ hành vi mặc định này, người ta có thể sử dụng các: lựa chọn nghiêm ngặt. Khi tùy chọn này được đặt thành true, một 406 không được chấp nhận lỗi được trả lại khi không có tiêu đề chấp nhận đúng được cung cấp.
Param
Phiên bản ‘v1’, bằng cách sử dụng:: param
Sử dụng chiến lược versioning này, khách hàng phải vượt qua phiên bản mong muốn như một tham số yêu cầu, hoặc trong chuỗi truy vấn URL hoặc ở cơ quan yêu cầu.
Curl: trạng thái-9292-public_timeline? apiver = v1
Tên mặc định cho các tham số truy vấn là ‘apiver’, nhưng có thể được xác định bằng cách sử dụng những: tham số tùy chọn.
Phiên bản ‘v1’, bằng cách sử dụng:: param, tham số: ‘v’
Curl: trạng thái-9292-public_timeline? v = v1
Bạn có thể thêm mô tả một phương pháp API và các không gian tên.
desc ‘Trở về thời gian công cộng của bạn.’ chi tiết ‘chi’ params API::Entities::Status.documentation thành công API::Entities::Entity thất bại 401, ‘Trái phép’, ‘Entities::Error’ đặt tên tiêu đề ‘Tuyến đường được đặt tên của tôi’ XAuthToken: mô tả: ‘Valdates nhận dạng của bạn’, yêu cầu: đúng, XOptionalHeader: mô tả: ‘Không thực sự cần thiết’, yêu cầu: sai cuối cùng nhận được: public_timeline làm Status.limit(20) cuối
chi tiết: tăng cường hơn nữa một mô tả
Params: xác định các thông số trực tiếp từ một thực thể
thành công: (cựu thực thể)Các thực thể sẽ được sử dụng để trình bày theo mặc định tuyến đường này
sự thất bại: (cựu http_codes) A định nghĩa của thất bại được sử dụng HTTP mã và các tổ chức
Tên: một helper để đặt tên cho một con đường và tìm thấy nó với tên này trong tài liệu băm
tiêu đề: một định nghĩa của tiêu đề được sử dụng
Thông số
Yêu cầu thông số có sẵn thông qua các đối tượng băm params. Điều này bao gồm GET, POST và đặt các thông số, cùng với bất kỳ tham số được đặt tên theo bạn chỉ định trong đường dây của bạn.
có: public_timeline làm Status.order(params:sort_by) cuối
Tham số được tự động điền từ cơ yêu cầu trên bài và đưa cho các hình thức đầu vào, JSON và XML-các loại nội dung.
Yêu cầu:
Endpoint nho:
Bài viết nhiều phần và đặt được hỗ trợ là tốt.
Yêu cầu:
Endpoint nho:
đường dây tham số
nội dung của các cơ quan yêu cầu trên bài đăng và đặt
đường dây thông số sẽ có được ưu tiên.
Tuyên bố
Nho cho phép bạn truy cập vào chỉ là các thông số đã được tuyên bố của khối chủ của bạn. Nó bộ lọc ra chủ đó đã được thông qua, nhưng không được phép. Hãy xem xét điểm cuối API sau đây:
định dạng: json đăng bài ‘người sử dụng/đăng ký’ do ‘declared_params’ => declared(params) cuối
Nếu chúng tôi không chỉ định bất kỳ chủ, tuyên bố sẽ trở về một trường hợp Hashie::Mash có sản phẩm nào.
Yêu cầu
Phản ứng
“declared_params”: khi chúng tôi đã thêm các thông số yêu cầu, nho sẽ bắt đầu quay trở về chỉ params tuyên bố.
định dạng: json params yêu cầu: người dùng, loại: băm đòi hỏi: first_name, loại: chuỗi yêu cầu: last_name, loại: chuỗi cuối cùng kết thúc bài ‘người sử dụng/đăng ký’ làm ‘declared_params’ => declared(params) cuối
Yêu cầu
Phản ứng
“declared_params”: “người dùng”: “first_name”: “tên”, “last_name”: “tên” hash trở về là một trường hợp Hashie::Mash, cho phép bạn truy cập vào các thông số thông qua dấu chấm ký hiệu:
tuyên bố .user (params) == tuyên bố (params) ‘người dùng’
Phương pháp #declared không phải là có sẵn để trước khi lọc, như những người được đánh giá trước khi ép buộc tham số.
Bao gồm thiếu
Theo mặc định declared(params) bao gồm các tham số có giá trị nil. Nếu bạn muốn trở lại chỉ là các thông số mà không phải là con số không, bạn có thể sử dụng tùy chọn include_missing. Theo mặc định, include_missing được thiết lập True. Hãy xem xét các API sau đây:
định dạng: json params đòi hỏi: first_name, loại: chuỗi tùy chọn: last_name, loại: chuỗi cuối bài ‘người sử dụng/đăng ký’ làm ‘declared_params’ => tuyên bố (params, include_missing: sai) kết thúc
Yêu cầu
Phản ứng với include_missing:false
Phản ứng với include_missing:true
“declared_params”: “first_name”: “tên”, “last_name”: null nó cũng hoạt động trên lồng nhau băm:
định dạng: json chủ yêu cầu: người dùng, loại: băm đòi hỏi: first_name, loại: chuỗi tùy chọn: last_name, loại: String đòi hỏi: địa chỉ, gõ: băm đòi hỏi: city, loại: chuỗi tùy chọn: vùng, loại: chuỗi kết thúc cuối cùng kết thúc bài ‘người sử dụng/đăng ký’ do ‘declared_params’ => tuyên bố (params, include_missing: sai) kết thúc
Yêu cầu
Phản ứng với include_missing:false
Phản ứng với include_missing:true
“declared_params”: “người dùng”: “first_name”: “tên”, “last_name”: null, “địa chỉ”: “city”: “Zurich”, “khu vực”: null lưu ý rằng một thuộc tính có giá trị nil không được coi là mất tích và cũng sẽ được trả lại khi include_missing được thiết lập để sai:
Yêu cầu
Phản ứng với include_missing:false
Tham số xác nhận và cưỡng chế
Bạn có thể xác định validations và ép buộc các tùy chọn cho các tham số của bạn bằng cách sử dụng một khối chủ.
chủ yêu cầu: id, loại: số nguyên tùy chọn: văn bản, loại: chuỗi, regexp: /\Aa-z+\z/ Nhóm: phương tiện truyền thông yêu cầu: url kết thúc tùy chọn: âm thanh yêu cầu: định dạng, gõ: biểu tượng, giá trị:: mp3,: wav,: aac,: ogg, mặc định:: mp3 kết thúc mutually_exclusive: phương tiện truyền thông,: âm thanh cuối cùng đặt ‘: id’ do # params:id là kết thúc số nguyên
Khi một loại được chỉ định một xác nhận tiềm ẩn được thực hiện sau khi cưỡng chế để đảm bảo đầu ra loại một tuyên bố.
Tham số tùy chọn có thể cógiá trị mặc định.
Params làm tùy chọn: màu sắc, nhập: chuỗi, mặc định: ‘xanh’ tùy chọn: random_number, loại: số nguyên, mặc định:-> (1..100) tùy chọn: non_random_number, loại: số nguyên, mặc định: kết thúc (1..100)
Lưu ý rằng giá trị mặc định sẽ được chuyển qua cho bất kỳ tùy chọn xác nhận được chỉ định. Ví dụ sau sẽ luôn không thành công nếu: màu sắc không rõ ràng được cung cấp.
Params làm tùy chọn: màu sắc, nhập: chuỗi, mặc định: ‘xanh’, giá trị: kết thúc ‘đỏ’, ‘xanh’
Việc thực hiện chính xác là để đảm bảo giá trị mặc định vượt qua tất cả validations.
Params làm tùy chọn: màu sắc, nhập: chuỗi, mặc định: ‘xanh’, giá trị: ‘xanh’, ‘đỏ’, ‘xanh’ kết thúc
Hỗ trợ các tham số loại
Sau đây là giá trị tất cả các loại, hỗ trợ ra khỏi hộp nho:
Số nguyên
Phao nổi
BigDecimal
Số
Ngày
DateTime
Thời gian
Boolean
Chuỗi
Biểu tượng
Tùy chỉnh loại và Coercions
Ngoài các thiết lập mặc định của loại hỗ trợ được liệt kê ở trên, bất kỳ lớp học có thể được sử dụng như một loại như vậy miễn là một phương pháp cưỡng chế rõ ràng được cung cấp. Nếu loại thực hiện một phương pháp phân tích cấp lớp, nho sẽ sử dụng nó tự động. Phương pháp này phải mất một chuỗi đối số và trở về một thể hiện của các loại chính xác, hoặc nâng cao một ngoại lệ để cho biết giá trị là không hợp lệ. Ví dụ:
lớp màu attr_reader: giá trị def initialize(color) @value = màu kết thúc def self.parse(value) thất bại ‘không hợp lệ màu’ trừ khi %w(blue red green).include? (giá trị) new(value) cuối cùng kết thúc #… chủ yêu cầu: màu sắc, loại: màu sắc, mặc định: (‘blue’) kết thúc nhận được ‘ / công cụ ‘ do # params:color đã là một màu sắc. Params:Color.value cuối
Ngoài ra, một phương pháp cưỡng chế tùy chỉnh có thể được cung cấp cho bất kỳ loại thông số bằng cách sử dụng coerce_with. Bất kỳ lớp hay đối tượng có thể được đưa ra thực hiện một phương pháp phân tích hoặc gọi điện thoại, trong đó thứ tự ưu tiên. Các phương pháp phải chấp nhận một tham số chuỗi duy nhất, và giá trị trả lại phải phù hợp với loại nhất định.
chủ yêu cầu: passwd, loại: String, coerce_with: Base64.method(:decode) yêu cầu: loud_color, loại: màu, coerce_with:->(c) Color.parse(c.downcase) yêu cầu: obj, loại: băm, coerce_with: JSON đòi hỏi: từ, loại: ArrayString, coerce_with:->(val) val.split(/\s+/) tùy chọn: thời gian, gõ: thời gian, coerce_with: mãn tính kết thúc kết thúc
Ví dụ của việc sử dụng của coerce_with với một lambda (một lớp học với một phương pháp phân tích cũng có thể được sử dụng), nó sẽ phân tích một chuỗi và trả lại một mảng của nguyên, kết hợp các loại ArrayInteger.
chủ yêu cầu: giá trị, loại: ArrayInteger, coerce_with:->(val) val.split(/\s+/).map(&:to_i) cuối
Thông số phần tập tin
Nho sử dụng Rack:: yêu cầu xây dựng trong hỗ trợ cho các tập tin phần thông số. Các thông số như vậy có thể được khai báo với loại: File:
chủ yêu cầu: avatar, loại: tập tin kết thúc đăng bài ‘ /’ làm tham số sẽ được bọc bằng cách sử dụng Hashie: params.avatar.filename # => ” # => ‘hình ảnh/png’ params.avatar.tempfile # => # kết thúc
Các loại lớp học đầu tiên JSON
Nho hỗ trợ phức tạp các thông số được đưa ra như là chuỗi định dạng JSON bằng cách sử dụng loại đặc biệt: JSON tuyên bố. Các đối tượng JSON và mảng của các đối tượng được chấp nhận không kém, với lồng xác nhận các quy tắc áp dụng cho tất cả các đối tượng trong cả hai trường hợp:
chủ yêu cầu: json, loại: JSON đòi hỏi: int, loại: số nguyên, giá trị: 1, 2, 3 kết thúc cuối cùng nhận được ‘ /’ làm params:json.inspect kết thúc #… (‘/’, json: ‘ “int”: 1’) # => “: int => 1” (‘/’, json: ‘ “int”: “1” ‘) # => “: int => 1” (‘/’, json: ‘ “int”: 4’) # => HTTP 400 (‘/’, json: ‘ “int”: 4’) # => HTTP 400
Ngoài ra loại: ArrayJSON có thể được sử dụng, mà rõ ràng đánh dấu các tham số như là một mảng của các đối tượng. Nếu một đối tượng duy nhất được cung cấp nó sẽ được bọc.
chủ yêu cầu: json, loại: ArrayJSON yêu cầu: int, loại: số nguyênkết thúc kết thúc nhận được ‘ /’ làm params:json.each obj.. # luôn luôn làm việc cuối cùng
Kiểm soát chặt chẽ hơn loại cấu trúc JSON và nó có thể được cung cấp, sử dụng loại: mảng, coerce_with: JSON hoặc loại: băm, coerce_with: JSON.
Nhiều loại được phép
Biến thể loại các thông số có thể được tuyên bố bằng cách sử dụng các loại lựa chọn chứ không phải là các loại:
chủ yêu cầu: status_code, loại: số, Chuỗi, ArrayInteger, Chuỗi cuối cùng nhận được ‘ /’ làm params:status_code.inspect # kết thúc… (‘/’, status_code: ‘OK_GOOD’) # => “OK_GOOD” (‘/’, status_code: 300) # => 300 (‘/’, status_code: %w(404 NOT FOUND)) # => 404, “không”, “Tìm THẤY”
Là một trường hợp đặc biệt, các bộ sưu tập của biến thể-thành viên-type có thể cũng được công bố, bằng cách đi bộ hoặc mảng với các thành viên nhiều hơn một để loại:
chủ yêu cầu: status_codes, loại: ArrayInteger, Chuỗi kết thúc nhận được ‘ /’ làm params:status_codes.inspect kết thúc #… (‘/’, status_codes: %w(1 two)) # => 1, “hai”
Xác nhận các thông số lồng nhau
Tham số có thể được lồng nhau bằng cách sử dụng nhóm hoặc bằng cách gọi điện yêu cầu hoặc tùy chọn với một khối. Trong ví dụ trên, điều này có nghĩa là params:media:url là cần thiết cùng với params:id, và params:audio:format là cần thiết nếu params:audio là hiện tại. Với một khối, nhóm, yêu cầu và tùy chọn chấp nhận một loại tùy chọn bổ sung mà có thể là mảng hoặc băm, và mặc định là mảng. Tùy thuộc vào giá trị, các tham số lồng nhau sẽ được đối xử như giá trị của một băm hoặc là giá trị băm trong một mảng.
Params làm tùy chọn: sở thích, loại: mảng yêu cầu: phím yêu cầu: giá trị cuối cùng yêu cầu: name, gõ: băm đòi hỏi: first_name đòi hỏi: last_name kết thúc kết thúc
Phụ thuộc vào các thông số
Giả sử một số tham số của bạn là chỉ có liên quan nếu tham số khác được đưa ra; Nho cho phép bạn thể hiện mối quan hệ này thông qua phương pháp được đưa ra trong khối tham số của bạn, như vậy:
Params làm tùy chọn: shelf_id, loại: số nguyên được đưa ra: shelf_id yêu cầu: bin_id, loại: số nguyên kết thúc kết thúc
Built-in Validators
allow_blank
Tham số có thể được định nghĩa như là allow_blank, đảm bảo rằng họ có chứa một giá trị. Theo mặc định, đòi hỏi phải chỉ xác nhận rằng một tham số được gửi yêu cầu, không phân biệt giá trị của nó. Với allow_blank: sai, sản phẩm nào giá trị hoặc khoảng trắng chỉ có giá trị là không hợp lệ.
allow_blank có thể được kết hợp với cả hai yêu cầu và tùy chọn. Nếu tham số này là cần thiết, nó có chứa một giá trị. Nếu nó là tùy chọn, nó có thể không gửi nó trong yêu cầu, nhưng nếu nó được gửi, nó đã có một số giá trị và không phải là một chuỗi rỗng/chỉ whitespaces.
Params đòi hỏi: tên người dùng, allow_blank: giả tùy chọn: first_name, allow_blank: giả kết thúc
giá trị
Tham số có thể bị giới hạn đến một tập hợp cụ thể của các giá trị với các: lựa chọn các giá trị.
Giá trị mặc định được đánh giá một cách hăm hở. Ở trên: non_random_number sẽ đánh giá để cùng một số cho mỗi cuộc gọi đến điểm cuối của khối chủ này. Để mặc định đánh giá lazily với mỗi lần sử dụng yêu cầu một lambda, giống như: random_number ở trên.
chủ yêu cầu: trạng thái, loại: biểu tượng, giá trị:: not_started,: xử lý,: thực hiện tùy chọn: số lượng, loại: ArrayInteger, mặc định: 1, giá trị: 1, 2, 3, 5, 8 end
Cung cấp một phạm vi đến các: lựa chọn giá trị bảo đảm rằng các tham số là (hoặc các tham số) được bao gồm trong phạm vi đó (bằng cách sử dụng phạm vi #include?).
Params đòi hỏi: latitude, loại: phao, giá trị:-90.0.. + 90.0 đòi hỏi: kinh độ, loại: phao, giá trị:-180.0.. + 180.0 tùy chọn: chữ cái, các loại: ArrayString, giá trị: ‘a’… ‘ z’ kết thúc
Lưu ý rằng cả hai điểm cuối dãy có là một #kind_of? của bạn: nhập tùy chọn (nếu bạn khôngcung cấp các: loại tùy chọn, nó sẽ đoán được tương đương với các lớp học của các phạm vi tiên endpoint). Vì vậy, sau đây là không hợp lệ:
chủ yêu cầu: invalid1, loại: thả nổi giá trị: 0..10 # 0.kind_of? (Float) => giả tùy chọn: invalid2, giá trị: 0..10.0 # 10.0.kind_of? (0.class) => giả kết thúc
Các: giá trị tùy chọn cũng có thể được cung cấp với một Proc, đánh giá lazily với mỗi yêu cầu. Ví dụ, được đưa ra một mô hình trạng thái bạn có thể muốn hạn chế bởi hashtags mà bạn có trước đó xác định trong mô hình HashTag.
chủ yêu cầu: hashtag, loại: chuỗi, giá trị:-> (&: tag) kết thúc
RegExp
Tham số có thể được hạn chế để phù hợp với một biểu hiện cụ thể thường xuyên với các: regexp tùy chọn. Nếu giá trị không khớp với biểu thức thông thường, một lỗi sẽ được trả lại. Lưu ý rằng điều này đúng cho cả hai yêu cầu và tham số tùy chọn.
chủ yêu cầu: email, regexp: /. + @. / kết thúc
Validator sẽ vượt qua nếu tham số được gửi mà không có giá trị. Để đảm bảo rằng các tham số có chứa một giá trị, sử dụng allow_blank: sai.
chủ yêu cầu: email, allow_blank: false, regexp: /. + @. / kết thúc
mutually_exclusive
Tham số có thể được định nghĩa như là mutually_exclusive, đảm bảo rằng họ không phải là hiện tại cùng một lúc trong một yêu cầu.
Params làm tùy chọn: tùy chọn bia: rượu mutually_exclusive: bia,: rượu cuối cùng
Nhiều bộ có thể được định nghĩa:
Params làm tùy chọn: tùy chọn bia: rượu mutually_exclusive: bia,: rượu tùy chọn: scotch tùy chọn: aquavit mutually_exclusive: scotch,: aquavit cuối
Chú ý: Không bao giờ xác định bộ lẫn với bất kỳ chủ yêu cầu. Hai chủ lẫn yêu cầu sẽ có nghĩa là chủ không bao giờ hợp lệ, do đó làm cho điểm cuối vô dụng. Một trong những yêu cầu param loại trừ lẫn nhau với một tùy chọn param sẽ có nghĩa là sau đó là không bao giờ được hợp lệ.
exactly_one_of
Tham số có thể được định nghĩa là ‘exactly_one_of’, đảm bảo chính xác một tham số đó được lựa chọn.
Params làm tùy chọn: tùy chọn bia: rượu exactly_one_of: bia,: rượu cuối cùng
at_least_one_of
Tham số có thể được định nghĩa là ‘at_least_one_of’, đảm bảo rằng ít nhất một tham số được chọn.
Params làm tùy chọn: tùy chọn bia: rượu tùy chọn: nước trái cây at_least_one_of: bia,: rượu vang,: kết thúc ép
all_or_none_of
Tham số có thể được định nghĩa là ‘all_or_none_of’, đảm bảo rằng tất cả hoặc không có tham số được chọn.
Params làm tùy chọn: tùy chọn bia: rượu tùy chọn: nước trái cây all_or_none_of: bia,: rượu vang,: kết thúc ép
Lồng mutually_exclusive, exactly_one_of, at_least_one_of, all_or_none_of
Tất cả những phương pháp này có thể được sử dụng ở bất kỳ cấp lồng nhau.
chủ yêu cầu: thực phẩm làm tùy chọn: thịt tùy chọn: cá tùy chọn: gạo at_least_one_of: thịt,: cá,: gạo kết thúc Nhóm: uống làm tùy chọn: bia tùy chọn: rượu tùy chọn: nước trái cây exactly_one_of: bia,: rượu vang,: cuối cùng nước trái cây tùy chọn: món tráng miệng làm tùy chọn: bánh tùy chọn: icecream mutually_exclusive: bánh,: icecream cuối tùy chọn: công thức làm tùy chọn: dầu tùy chọn: thịt all_or_none_of: dầu,: thịt kết thúc kết thúc
Không gian tên xác nhận và cưỡng chế
Không gian tên cho phép định nghĩa tham số và áp dụng cho mọi phương pháp trong không gian tên.
không gian tên: trạng thái làm chủ yêu cầu: user_id, loại: số nguyên, desc: ‘Một người dùng ID’ kết thúc không gian tên ‘: user_id’ do desc “Lấy một người sử dụng trạng thái.” chủ yêu cầu: status_id, loại: số nguyên, desc: ‘Một trạng thái của bạn.’ kết thúc nhận được ‘: status_id’ làm (params:user_id). (params:status_id) kết thúc cuối cùng kết thúc
Phương pháp không gian tên có một số bí danh, bao gồm: nhóm, nguồn lực, nguồn lực và phân đoạn. Sử dụng bất cứ đọc tốt nhất cho các API của bạn.
Bạn thuận tiện có thể xác định tham số tuyến đường như là một không gian tên bằng cách sử dụng route_param.
Tên: trạng thái làm route_param: id do desc ‘Trả về tất cả các bài trả lời cho tình trạng một.’ nhận được ‘trả lời’ do (params:id) .replies kết thúc desc ‘Trở lại’ trạng thái một. có được làm (params:id) kết thúc cuối cùng kết thúc
Bạn có thểcũng xác định một lộ trình tham số loại bằng cách đi đến lựa chọn của route_param.
Tên: học làm route_param: n, loại: số nguyên do desc ‘Trả lại quyền lực’ có được ‘quyền lực’ làm params:n params:n kết thúc cuối cùng kết thúc
Tùy chỉnh Validators
chủ yêu cầu: văn bản, alpha_numeric: sự thật cuối cùng
Bạn cũng có thể tạo các lớp học tùy chỉnh có thông số.
lớp chiều dài < grape::validations::base="" def="" validate_param!="" (attr_name,="" params)="" trừ="" khi="" paramsattr_name.length="">< =="" thất="" bại="" @option="" grape::exceptions::validation,="" chủ:="" @scope.full_name(attr_name),="" tin="" nhắn:="" "phải="" là="" nhất="" [email protected]="" ký="" tự"="" kết="" thúc="" cuối="" cùng="" kết="" thúc="" chủ="" yêu="" cầu:="" văn="" bản,="" độ="" dài:="" 140="" kết="" thúc="" bạn="" cũng="" có="" thể="" tạo="" tùy="" chỉnh="" xác="" nhận="" sử="" dụng="" yêu="" cầu="" để="" xác="" nhận="" các="" thuộc="" tính.="" ví="" dụ:="" nếu="" bạn="" muốn="" có="" thông="" số="" có="" sẵn="" để="" chỉ="" quản="" trị="" viên,="" bạn="" có="" thể="" làm="" như="" sau.="" lớp="" admin="">< grape::validations::base="" def="" validate(request)="" #="" quay="" trở="" lại="" nếu="" param="" chúng="" tôi="" đang="" kiểm="" tra="" yêu="" cầu="" không="" #="" @attrs="" là="" một="" danh="" sách="" chứa="" các="" thuộc="" tính="" mà="" chúng="" tôi="" hiện="" đang="" phê="" chuẩn="" #="" trong="" mẫu="" của="" chúng="" tôi="" trường="" hợp="" phương="" pháp="" này="" một="" lần="" sẽ="" có="" được="" gọi="" là="" #="" @attrs="" là:="" admin_field="" và="" một="" lần="" với="" @attrs="" là:="" admin_false_field="" trở="" lại="" trừ="" khi?="" @attrs.first="" #="" kiểm="" tra="" nếu="" admin="" cờ="" được="" thiết="" lập="" true="" trở="" lại="" trừ="" khi="" @option="" #="" kiểm="" tra="" nếu="" người="" dùng="" là="" admin="" hay="" không="" #="" ví="" dụ="" nhận="" được="" một="" mã="" thông="" báo="" yêu="" cầu="" và="" kiểm="" tra="" xem="" nó="" là="" admin="" hoặc="" không="" thất="" bại="" grape::exceptions::validation,="" params:="" @attrs,="" thư:="" 'không="" thể="" đặt="" chỉ="" có="" admin="" trường.'="" trừ="" khi="" request.headers'x="" truy="" cập="" mã="" thông="" báo="" '="=" 'quản="" trị'="" kết="" thúc="" kết="" thúc="" và="" sử="" dụng="" nó="" trong="" định="" nghĩa="" điểm="" cuối="" của="" bạn="" như:="" params="" làm="" tùy="" chọn:="" admin_field,="" loại:="" chuỗi,="" admin:="" true="" tùy="" chọn:="" non_admin_field,="" loại:="" chuỗi="" tùy="" chọn:="" admin_false_field,="" loại:="" chuỗi,="" admin:="" cuối="" sai="" lỗi="" soát="" hợp="" thức="" lỗi="" soát="" hợp="" thức="" và="" ép="" buộc="" được="" thu="" thập="" và="" ngoại="" lệ="" của="" loại="" grape::exceptions::validationerrors="" được="" nêu="" ra.="" nếu="" trừ="" đi="" còn="" tự="" do,="" nó="" sẽ="" phản="" ứng="" với="" trạng="" thái="" 400="" và="" một="" thông="" báo="" lỗi.="" lỗi="" soát="" hợp="" thức="" được="" nhóm="" theo="" tên="" tham="" số="" và="" có="" thể="" được="" truy="" cập="" thông="" qua="" grape::exceptions::validationerrors="" #errors.="" các="" phản="" ứng="" mặc="" định="" từ="" grape::exceptions::validationerrors="" một="" là="" một="" chuỗi="" humanly="" có="" thể="" đọc="" được,="" chẳng="" hạn="" như="" "bia,="" rượu="" là="" loại="" trừ="" lẫn="" nhau",="" trong="" ví="" dụ="" sau.="" params="" làm="" tùy="" chọn:="" tùy="" chọn="" bia:="" rượu="" tùy="" chọn:="" nước="" trái="" cây="" exactly_one_of:="" bia,:="" rượu="" vang,:="" kết="" thúc="" ép="" bạn="" có="" thể="" giải="" cứu="" một="" grape::exceptions::validationerrors="" và="" trả="" lời="" với="" một="" phản="" ứng="" tùy="" chỉnh="" hoặc="" biến="" các="" phản="" ứng="" thành="" cũng="" như="" định="" dạng="" json="" cho="" một="" api="" json="" tách="" riêng="" các="" thông="" số="" và="" các="" thông="" báo="" lỗi="" tương="" ứng.="" ví="" dụ="" rescue_from="" sau="" sản="" xuất="" "chủ":="" "bia",="" "rượu",="" "thư":="" "là="" loại="" trừ="" lẫn="" nhau".="" định="" dạng:="" json="" subject.rescue_from="" grape::exceptions::validationerrors="" làm="" e="" lỗi!="" e,="" kết="" thúc="" 400="" grape::exceptions::validationerrors="" #full_messages="" trả="" về="" tin="" nhắn="" xác="" nhận="" như="" là="" một="" mảng.="" grape::exceptions::validationerrors="" #message="" nhập="" các="" tin="" nhắn="" đến="" một="" chuỗi.="" để="" đáp="" ứng="" với="" một="" loạt="" các="" tin="" nhắn="" xác="" nhận,="" bạn="" có="" thể="" sử="" dụng="" grape::exceptions::validationerrors="" #full_messages.="" định="" dạng:="" json="" subject.rescue_from="" grape::exceptions::validationerrors="" làm="" e="" lỗi!="" (tin="" nhắn:="" e.full_messages,="" 400)="" kết="" thúc="" i18n="" nho="" hỗ="" trợ="" i18n="" cho="" tham="" số="" liên="" quan="" đến="" lỗi="" tin="" nhắn,="" nhưng="" sẽ="" dự="" phòng="" để="" tiếng="" anh="">nho ninh thuận nếu các bản dịch cho miền địa phương mặc định không được cung cấp. Xem tin nhắn khóa.
Thư xác nhận tuỳ chỉnh
sự hiện diện, allow_blank, giá trị, regexp
chủ yêu cầu: tên, giá trị: giá trị: 1..10, tin nhắn: ‘ không phải trong khoảng từ 1 đến 10’, allow_blank: giá trị: sai, thông điệp: ‘không thể trống’, regexp: giá trị: / ^ AZ + $/ tin nhắn: ‘định dạng không hợp lệ’, tin nhắn: ‘phải’ kết thúc
all_or_none_of
Params làm tùy chọn: bia tùy chọn: rượu tùy chọn: nước trái cây all_or_none_of: bia,: rượu vang,: nước trái cây, thông điệp: “tất cả params là bắt buộc hay không là yêu cầu” kết thúc
mutually_exclusive
Params làm tùy chọn: bia tùy chọn: rượu tùy chọn: nước trái cây mutually_exclusive: bia,: rượu vang,: nước trái cây, thông điệp: “làcuối cùng, độc quyền không thể vượt qua cả hai chủ”
exactly_one_of
Params làm tùy chọn: bia tùy chọn: rượu tùy chọn: nước trái cây exactly_one_of: bia,: rượu vang,: nước trái cây, thông điệp: exactly_one: “đang thiếu, đúng một tham số được yêu cầu”, mutual_exclusion: “lẫn nhau, một số được yêu cầu” kết thúc
at_least_one_of
Params làm tùy chọn: bia tùy chọn: rượu tùy chọn: nước trái cây at_least_one_of: bia,: rượu vang,: nước trái cây, thông điệp: “là mất tích, hãy chỉ định ít nhất một param” kết thúc
Ép buộc
chủ yêu cầu: int, loại: giá trị: số nguyên, tin nhắn: “diễn viên loại là không hợp lệ” cuối cùng
Với Lambdas
chủ yêu cầu: tên, giá trị: giá trị:->.to_a (1..10), thông điệp: ‘không có trong phạm vi từ 1 đến 10’ kết thúc
Vượt qua các biểu tượng cho bản dịch i18n
Bạn có thể vượt qua một biểu tượng nếu bạn muốn tham khảo i18n cho thư xác nhận tuỳ chỉnh của bạn.
chủ yêu cầu: tên, thông điệp:: kết thúc name_required
# en: nho: lỗi: định dạng:! thông điệp ‘% thuộc tính % tin nhắn’: name_required: ‘phải có mặt’
Thay thế tên thuộc tính
# en: nho: lỗi: định dạng:! thông điệp ‘% thuộc tính % tin nhắn’: name_required: ‘phải có mặt’ thuộc tính: Tên: ‘ rất tiếc! Tên ‘
Sẽ sản xuất ‘ rất tiếc! Tên phải có mặt ‘
Với mặc định
Bạn không thể đặt một tin nhắn tùy chỉnh tùy chọn mặc định vì nó đòi hỏi phải nội suy % option1: % value1 là không tương thích với % option2: % value2. Bạn có thể thay đổi các thông báo lỗi mặc định cho các mặc định bằng cách thay đổi incompatible_option_values tin nhắn khóa bên trong params do yêu cầu: tên, giá trị: giá trị:->.to_a (1..10), thông điệp: ‘ không phải trong khoảng từ 1 đến 10’, mặc định: 5 end
Tiêu đề
Đầu đề yêu cầu có sẵn thông qua tiêu đề helper hoặc từ env ở dạng ban đầu của họ.
nhận được do lỗi! (‘Trái phép’, 401) trừ phi headers’Secret mật khẩu ‘ == ‘swordfish’ kết thúc
nhận được do lỗi! (‘Trái phép’, 401) trừ khi env ‘HTTP_SECRET_PASSWORD’ == ‘swordfish’ kết thúc
Bạn có thể thiết lập một tiêu đề phản ứng với các tiêu đề trong một API.
tiêu đề ‘X-Robots-Tag’, ‘noindex’
lỗi! ‘Trái phép’, 401, ‘X-lỗi-chi tiết’ => ‘Mã thông báo không hợp lệ.’
Tuyến đường
Tùy chọn, bạn có thể xác định yêu cầu cho các tham số được đặt tên theo con đường của bạn bằng cách sử dụng biểu thức thông thường trên không gian tên hoặc điểm cuối. Các tuyến đường sẽ phù hợp với chỉ khi tất cả yêu cầu được đáp ứng.
nhận được ‘: id’, yêu cầu: id: /0-9 / làm không gian tên cuối cùng (params:id): bên ngoài, yêu cầu: id: /0-9 / nhận được: id kết thúc nhận được ‘: id/chỉnh sửa ‘ kết thúc cuối cùng
Người trợ giúp
Bạn có thể xác định các phương pháp helper hai điểm cuối của bạn có thể sử dụng với các vĩ mô người trợ giúp bằng cách đưa ra hoặc là một khối hoặc một mô-đun.
Mô-đun StatusHelpers def user_info(user) “#user statused #user.statuses status(s) đã” cuối cùng kết thúc lớp API < grape::api="" #="" xác="" định="" người="" trợ="" giúp="" với="" một="" khối="" người="" trợ="" giúp="" làm="" def="" current_user="" (params:user_id)="" kết="" thúc="" kết="" thúc="" #="" hoặc="" pha="" trộn="" trong="" một="" mô-đun="" trợ="" giúp="" statushelpers="" nhận="" được="" 'thông="" tin'="" do="" #="" người="" trợ="" giúp="" có="" sẵn="" ở="" điểm="" cuối="" và="" các="" bộ="" lọc="" user_info(current_user)="" kết="" thúc="" cuối="" cùng="" của="" bạn="" bạn="" có="" thể="" định="" nghĩa="" chủ="" tái="" sử="" dụng="" bằng="" cách="" sử="" dụng="" người="" trợ="" giúp.="" lớp="" api="">< grape::api="" người="" trợ="" giúp="" làm="" chủ:="" pagination="" làm="" tùy="" chọn:="" trang,="" loại:="" số="" nguyên="" tùy="" chọn:="" per_page,="" loại:="" số="" nguyên="" kết="" thúc="" thúc="" desc="" 'nhận="" được="" bộ="" sưu="" tập'="" chủ="" sử="" dụng:="" pagination="" #="" bí="" danh:="" bao="" gồm,="" use_scope="" kết="" thúc="" nhận="" làm="" (params:page).per(params:per_page)="" cuối="" bạn="" cũng="" có="" thể="" định="" nghĩa="" chủ="" tái="" sử="" dụng="" bằng="" cách="" sử="" dụng="" chia="" sẻ="" người="" trợ="" giúp.="" mô-đun="" sharedparams="" mở="" rộng="" grape::api::helpers="" chủ:="" giai="" đoạn="" làm="" tùy="" chọn:="" start_date="" tùy="" chọn:="" end_date="" kết="" thúc="" chủ:="" pagination="" làm="" tùy="" chọn:="" trang,="" loại:="" số="" nguyên="" tùy="" chọn:="" per_page,="" loại:="" số="" nguyên="" cuối="" cùng="" kết="" thúc="" lớp="" api="">< grape::api="" người="" trợ="" giúp="" sharedparams="" desc="" 'đi="" bộ="" sưu="" tập'="" chủ="" sử="" dụng:="" thời="" gian,:="" pagination="" kết="" thúc="" nhận="" làm="" collectionfrom(params:start_date)to(params:end_date)page(params:page)per(params:per_page)="" kết="" thúc="" kết="" thúc="" giúp="" hỗ="" trợ="" các="" khối="" có="" thể="" giúp="" thiết="" lập="" giá="" trị="" mặc="" định.="" api="" sau="" đây="" có="" thể="" trở="" lại="" một="" bộ="" sưu="" tập="" được="" sắp="" xếp="" theo="" id="" hoặc="" created_at="" trong="" asc="" hoặc="" desc="" thứ="" tự.="" mô-đun="" sharedparams="" mở="" rộng="" grape::api::helpers="" chủ:="" thứ="" tự="" làm="" tùy="" chọn="" tùy="" chọn:="" order_by,="" loại:="" biểu="" tượng,="" giá="" trị:="" tùy="" chọn:="" order_by,mặc="" định:="" tùy="" chọn:="" default_order_by="" tùy="" chọn:="" đặt="" hàng,="" loại:="" biểu="" tượng,="" giá="" trị:="" %="" i(asc="" desc),="" mặc="" định:="" tùy="" chọn:="" default_order="" cuối="" cùng="" kết="" thúc="" lớp="" api="">< grape::api="" người="" trợ="" giúp="" sharedparams="" desc="" 'nhận="" được'="" một="" bộ="" sưu="" tập="" được="" sắp="" xếp.="" chủ="" sử="" dụng:="" trật="" tự,="" order_by:%="" i(id="" created_at),="" default_order_by::="" created_at,="" default_order::="" asc="" cuối="" cuối="" có="" được="" do="" (params:order,="" params:order_by)="" đường="" dẫn="" người="" trợ="" giúp="" nếu="" bạn="" cần="" các="" phương="" pháp="" để="" tạo="" ra="" các="" đường="" dẫn="" bên="" trong="" hai="" điểm="" cuối="" của="" bạn,="" hãy="" xem="" đá="" quý="" nho="" route="" người="" trợ="" giúp.="" tham="" số="" tài="" liệu="" bạn="" có="" thể="" đính="" kèm="" tài="" liệu="" hướng="" dẫn="" bổ="" sung="" chủ="" bằng="" cách="" sử="" dụng="" một="" tài="" liệu="" băm.="" params="" làm="" tùy="" chọn:="" first_name,="" loại:="" chuỗi,="" tài="" liệu:="" ví="" dụ:="" 'jim'="" đòi="" hỏi:="" last_name,="" loại:="" chuỗi,="" tài="" liệu:="" ví="" dụ:="" kết="" thúc="" 'smith'="" cookie="" bạn="" có="" thể="" thiết="" lập,="" nhận="" được="" và="" xóa="" cookie="" của="" bạn="" rất="" đơn="" giản="" bằng="" cách="" sử="" dụng="" phương="" pháp="" cookies.="" lớp="" api="">< grape::api="" nhận="" được="" 'status_count'="" làm="" cookie:="" status_count="0" cookie:="" status_count="1" status_count:="" cookie:="" status_count="" kết="" thúc="" xóa="" 'status_count'="" làm="" status_count:="" cookies.delete(:status_count)="" kết="" thúc="" kết="" thúc="" sử="" dụng="" một="" cú="" pháp="" băm="" để="" thiết="" lập="" nhiều="" hơn="" một="" giá="" trị.="" cookie:="" status_count="giá" trị:="" 0,="" hết="" hạn:="" time.tomorrow,="" tên="" miền:="" '.',="" đường="" dẫn:="" '/'="" cookie:="" status_count:value="1" xóa="" cookie="" với="" xóa.="" cookies.delete:="" status_count="" cookies.delete:="" status_count,="" đường="" dẫn:="" '/'="" mã="" trạng="" thái="" http="" theo="" mặc="" định="" nho="" trả="" về="" một="" mã="" trạng="" thái="" 200="" cho="" nhận="" được="" yêu="" cầu="" và="" 201="" cho="" sau="" yêu="" cầu.="" bạn="" có="" thể="" sử="" dụng="" trạng="" thái="" để="" truy="" vấn="" và="" đặt="" mã="" trạng="" thái="" http="" thực="" tế="" bài="" làm="" tình="" trạng="" 202="" nếu="" tình="" trạng="=" 200="" #="" do="" một="" số="" điều="" cuối="" bạn="" cũng="" có="" thể="" sử="" dụng="" một="" ký="" hiệu="" mã="" trạng="" thái="" được="" cung="" cấp="" bởi="" rack="" utils="" bài="" làm="" tình="" trạng:="" kết="" thúc="" no_content="" chuyển="" hướng="" bạn="" có="" thể="" chuyển="" hướng="" đến="" một="" url="" mới="" tạm="" thời="" (302)="" hoặc="" vĩnh="" viễn="" (301).="" chuyển="" hướng="" '="" trạng="" thái="" api="" này="" trả="" về="" một="" thể="" hiện="" của="" grape::endpoint.="" lớp="" api="">< grape::api="" nhận="" được="" '="" trạng="" thái="" kết="" thúc="" api.recognize_path="" '="" trạng="" thái="" cho="" phép="" các="" phương="" pháp="" khi="" bạn="" thêm="" một="" tuyến="" đường="" có="" được="" cho="" một="" nguồn="" tài="" nguyên,="" một="" con="" đường="" cho="" các="" phương="" pháp="" đầu="" sẽ="" cũng="" được="" thêm="" tự="" động.="" bạn="" có="" thể="" vô="" hiệu="" hoá="" hành="" vi="" này="" với="" do_not_route_head.="" lớp="" api="">< grape::api="" do_not_route_head!="" nhận="" được="" '="" ví="" dụ="" '="" làm="" phản="" ứng="" duy="" nhất="" để="" có="" được="" kết="" thúc="" cuối="" cùng="" khi="" bạn="" thêm="" một="" tuyến="" đường="" cho="" một="" nguồn="" tài="" nguyên,="" một="" con="" đường="" cho="" các="" phương="" pháp="" lựa="" chọn="" cũng="" sẽ="" được="" thêm="" vào.="" các="" phản="" ứng="" với="" một="" yêu="" cầu="" tùy="" chọn="" sẽ="" bao="" gồm="" một="" tiêu="" đề="" "cho="" phép"="" danh="" sách="" các="" phương="" pháp="" hỗ="" trợ.="" lớp="" api="">< grape::api="" nhận="" được="" '="" rt_count'="" làm="" rt_count:="" current_user.rt_count="" kết="" thúc="" chủ="" yêu="" cầu:="" có="" giá="" trị,="" loại:="" số="" nguyên,="" desc:="" 'giá="" trị="" thêm="" vào="" số="" rt.'="" kết="" thúc="" đặt="" '="" rt_count'="" làm="" current_user.rt_count="" +="params:value.to_i" rt_count:="" current_user.rt_count="" kết="" thúc="" kết="" thúc="" curl="" -="" v="" -x="" lựa="" chọn:="" 3000/rt_count=""> tùy chọn /rt_count HTTP/1.1 > < http/1.1="" 204="" không="" có="" nội="" dung="">< cho="" phép:="" tùy="" chọn,="" get,="" mày="" có="" thể="" vô="" hiệu="" hoá="" hành="" vi="" này="" với="" do_not_route_options!.="" nếu="" một="" yêu="" cầu="" cho="" một="" nguồn="" tài="" nguyên="" được="" thực="" hiện="" với="" một="" phương="" thức="" http="" không="" được="" hỗ="" trợ,="" phản="" hồi="" http="" 405="" (phương="" thức="" không="" phép)="" sẽ="" được="" trả="" lại.="" curl="" -x="" xóa="" -="" v:="" 3000/rt_count=""> xóa /rt_count/ HTTP/1.1 > Host: localhost:3000 > < http/1.1="" 405="" phương="" thức="" không="" phép="">< cho="" phép:="" tùy="" chọn,="" có="" được,="" đưa="" nâng="" cao="" trường="" hợp="" ngoại="" lệ="" bạn="" có="" thể="" hủy="" bỏ="" thực="" hiện="" một="" phương="" pháp="" api="" bằng="" cách="" tăng="" lỗi="" với="" lỗi!.="" lỗi!="" 'truy="" cập="" bị="" từ="" chối',="" 401="" bất="" cứ="" điều="" gì="" mà="" đáp="" ứng="" các="" #to_s="" có="" thể="" được="" cho="" như="" là="" một="" đối="" số="" đầu="" tiên="" để="" lỗi!.="" lỗi!="" :="" not_found,="" 404="" bạn="" cũng="" có="" thể="" trở="" lại="" các="" đối="" tượng="" json="" được="" định="" dạng="" bằng="" cách="" tăng="" lỗi!="" và="" đi="" qua="" một="" băm="" thay="" vì="" một="" tin="" nhắn.="" lỗi!="" (lỗi:="" 'lỗi="" bất="" ngờ',="" xem="" chi="" tiết:="" thiếu="" widget',="" 500)="" bạn="" có="" thể="" trình="" bày="" tài="" liệu="" lỗi="" với="" một="" nho="" thực="" thể="" bằng="" cách="" sử="" dụng="" các="" đá="" quý="" thực="" thể="" nho.="" mô-đun="" api="" lớp="" lỗi="">< vạch="" trần="" grape::entity:="" mã="" vạch="" trần:="" thông="" báo="" kết="" thúc="" kết="" thúc="" ví="" dụ="" sau="" chỉ="" định="" các="" tổ="" chức="" để="" sử="" dụng="" trong="" định="" nghĩa="" http_codes.="" desc="" 'my="" lộ'="" làmthất="" bại="" 408,="" 'trái="" phép',="" api::error="" kết="" thúc="" lỗi!="" (thông="" báo:="" 'trái="" phép',="" 408)="" ví="" dụ="" sau="" chỉ="" định="" các="" thực="" thể="" trình="" bày="" một="" cách="" rõ="" ràng="" trong="" các="" thông="" báo="" lỗi.="" desc="" 'my="" lộ'="" làm="" thất="" bại="" 408,="" kết="" thúc="" 'trái="" phép'="" lỗi!="" (thông="" báo:="" 'trái="" phép',="" với:="" api::error,="" 408)="" mã="" trạng="" thái="" http="" lỗi="" mặc="" định="" theo="" mặc="" định="" nho="" trở="" về="" một="" mã="" trạng="" thái="" 500="" từ="" lỗi!.="" bạn="" có="" thể="" thay="" đổi="" điều="" này="" với="" default_error_status.="" lớp="" api="">< grape::api="" default_error_status="" 400="" có="" được="" '="" ví="" dụ="" '="" làm="" lỗi!="" '="" điều="" này="" cần="" phải="" có="" http="" tình="" trạng="" mã="" 400'="" kết="" thúc="" kết="" thúc="" xử="" lý="" 404="" cho="" nho="" để="" xử="" lý="" tất="" cả="" các="" 404s="" cho="" api="" của="" bạn,="" nó="" có="" thể="" hữu="" ích="" để="" sử="" dụng="" một="" nhận="" tất="" cả.="" trong="" hình="" thức="" đơn="" giản="" của="" nó,="" nó="" có="" thể="" như:="" route:="" bất="" kỳ,="" 'con="" đường'="" làm="" lỗi!="" #="" hoặc="" kết="" thúc="" cái="" gì="" khác="" nó="" là="" rất="" quan="" trọng="" để="" xác="" định="" điểm="" cuối="" này="" vào="" cuối="" của="" api="" của="" bạn,="" nó="" nghĩa="" là="" chấp="" nhận="" mọi="" yêu="" cầu.="" xử="" lý="" ngoại="" lệ="" nho="" có="" thể="" được="" cho="" biết="" để="" giải="" cứu="" tất="" cả="" các="" trường="" hợp="" ngoại="" lệ="" và="" trở="" lại="" chúng="" trong="" các="" định="" dạng="" api.="" lớp="" twitter::api="">< grape::api="" rescue_from:="" tất="" cả="" cuối="" cùng="" bạn="" cũng="" có="" thể="" cứu="" cụ="" thể="" trường="" hợp="" ngoại="" lệ.="" lớp="" twitter::api="">< grape::api="" rescue_from="" argumenterror,="" userdefinederror="" kết="" thúc="" trong="" trường="" hợp="" này="" userdefinederror="" phải="" được="" thừa="" hưởng="" từ="" standarderror.="" dạng="" lỗi="" sẽ="" phù="" hợp="" với="" các="" yêu="" cầu="" định="" dạng.="" xem="" "nội="" dung-các="" loại"="" dưới="" đây.="" tuỳ="" chỉnh="" lỗi="" định="" dạng="" cho="" hiện="" tại="" và="" bổ="" sung="" các="" loại="" có="" thể="" được="" định="" nghĩa="" với="" một="" proc.="" lớp="" twitter::api="">< grape::api="" error_formatter:="" txt,-=""> (thông điệp, backtrace, tùy chọn, env) “lỗi: #message từ #backtrace” kết thúc
Bạn cũng có thể sử dụng một mô-đun hoặc lớp học.
Mô-đun CustomFormatter def (tin nhắn, backtrace, tùy chọn, env) tin nhắn: tin nhắn, backtrace: backtrace cuối cùng kết thúc lớp Twitter::API < grape::api="" error_formatter:="" tùy="" chỉnh,="" customformatter="" cuối="" bạn="" có="" thể="" giải="" cứu="" tất="" cả="" các="" ngoại="" lệ="" với="" một="" khối="" mã.="" lỗi!="" wrapper="" tự="" động="" thiết="" lập="" mặc="" định="" mã="" lỗi="" và="" loại="" nội="" dung.="" lớp="" twitter::api="">< grape::api="" rescue_from:="" tất="" cả="" làm="" e="" lỗi!="" ("cứu="" từ="" #")="" cuối="" cùng="" kết="" thúc="" tùy="" chọn,="" bạn="" có="" thể="" thiết="" lập="" các="" định="" dạng,="" mã="" trạng="" thái="" và="" các="" tiêu="" đề.="" lớp="" twitter::api="">< grape::api="" định="" dạng:="" json="" rescue_from:="" tất="" cả="" làm="" e="" lỗi!="" (lỗi:="" 'server="" lỗi.',="" 500,="" 'content-type'=""> ‘văn bản/error’) kết thúc kết thúc
Bạn cũng có thể cứu các ngoại lệ cụ thể với một khối mã và xử lý các phản ứng Rack ở mức thấp nhất.
lớp Twitter::API < grape::api="" rescue_from:="" tất="" cả="" do="" e="" rack::="" (e.message,="" 500,="" 'content-type'=""> ‘văn bản/error’) .finish kết thúc kết thúc
Hay cứu ngoại lệ cụ thể.
lớp Twitter::API < grape::api="" rescue_from="" argumenterror="" làm="" e="" lỗi!="" ("argumenterror:="" #e.message")="" cuối="" cùng="" rescue_from="" notimplementederror="" làm="" e="" lỗi!="" ("notimplementederror:="" #e.message")="" cuối="" theo="" mặc="" định,="" rescue_from="" sẽ="" cứu="" các="" ngoại="" lệ="" được="" liệt="" kê="" và="" tất="" cả="" các="" lớp="" con="" của="" họ.="" giả="" sử="" bạn="" có="" các="" lớp="" ngoại="" lệ="" sau="" đây="" được="" xác="" định.="" mô-đun="" apierrors="" lớp="" parenterror="">< standarderror;="" kết="" thúc="" lớp="" childerror="">< parenterror;="" kết="" thúc="" kết="" thúc="" sau="" đó,="" khoản="" rescue_from="" sau="" sẽ="" cứu="" ngoại="" trừ="" kiểu="" apierrors::parenterror="" và="" lớp="" con="" của="" nó="" (trong="" apierrors::childerror="" trường="" hợp="" này).="" rescue_from="" apierrors::parenterror="" làm="" e="" lỗi!="" (lỗi:="" "#e.class="" lỗi",="" thông="" điệp:="" e.message,="" e.status)="" kết="" thúc="" chỉ="" cứu="" các="" lớp="" ngoại="" lệ="" cơ="" bản,="" thiết="" lập="" rescue_subclasses:="" sai.="" mã="" dưới="" đây="" sẽ="" giải="" cứu="" các="" ngoại="" lệ="" loại="" runtimeerror="" nhưng="" không="" phải="" là="" lớp="" con="" của="" nó.="" rescue_from="" runtimeerror,="" rescue_subclasses:="" giả="" làm="" e="" lỗi!="" (trạng="" thái:="" e.status,="" bài="" viết:="" e.message,="" lỗi:="" e.errors,="" e.status)="" kết="" thúc="" người="" trợ="" giúp="" cũng="" có="" sẵn="" trong="" rescue_from.="" lớp="" twitter::api="">< grape::api="" định="" dạng:="" json="" người="" trợ="" giúp="" làm="" def="" server_error!="" lỗi!="" (lỗi:="" 'server="" lỗi.',="" 500,="" 'content-type'=""> ‘văn bản/error’) kết thúc rescue_from: tất cả làm e server_error! kết thúc kết thúc
Khối rescue_from phải trả lại một đối tượng Rack::Response, gọi lỗi! hoặc lại nâng cao một ngoại lệ.
Các với các từ khóa có sẵn như là rescue_from tùy chọn, nó có thểđược thông qua phương pháp tên hoặc Proc đối tượng.
lớp Twitter::API < grape::api="" định="" dạng:="" json="" người="" trợ="" giúp="" làm="" def="" server_error!="" lỗi!="" (lỗi:="" 'server="" lỗi.',="" 500,="" 'content-type'=""> ‘văn bản/error’) kết thúc rescue_from: tất cả, với:: server_error! rescue_from ArgumentError, với:-> Rack:: (‘cứu sống với một phương pháp’, 400) kết thúc
Trường hợp ngoại lệ unrescuable
Grape::Exceptions::InvalidVersionHeader, được đưa ra khi các phiên bản trong tiêu đề yêu cầu không phù hợp với phiên bản hiện đang đánh giá cho điểm cuối, sẽ không bao giờ được cứu thoát từ một khối rescue_from (thậm chí một rescue_from: tất cả) điều này là bởi vì nho dựa trên Rack để bắt lỗi đó và cố gắng tiếp theo versioned-đường đối với trường hợp nơi có tồn tại hai điểm cuối nho giống hệt với phiên bản khác nhau.
Ray 3.x
Khi gắn bên trong container, chẳng hạn như Ray 3.x, lỗi chẳng hạn như “404 Not Found” hoặc “406 Không Acceptable” có khả năng sẽ được xử lý và kết xuất bằng cách xử lý Lan can. Ví dụ, truy cập vào một con đường không tồn tại “/ api/foo” tăng một 404, mà bên trong rails cuối cùng sẽ được dịch sang một ActionController::RoutingError, mà rất có thể sẽ được thực hiện để trang lỗi HTML.
Hầu hết các API sẽ thưởng thức ngăn chặn xử lý hạ lưu xử lý các lỗi. Bạn có thể thiết lập các: thác lựa chọn sai cho các API toàn bộ hoặc một cách riêng biệt trên phiên bản cụ thể định nghĩa, mà sẽ loại bỏ X-Cascade: đúng tiêu đề từ API hồi đáp.
Cascade sai
Đăng nhập
Grape::API cung cấp một phương pháp logger mà theo mặc định sẽ trở lại một thể hiện của lớp Logger từ thư viện chuẩn của Ruby.
Để đăng tin nhắn từ trong một điểm cuối, bạn cần xác định một helper cho logger có sẵn trong bối cảnh điểm cuối.
lớp API < grape::api="" người="" trợ="" giúp="" làm="" def="" logger="" api.logger="" cuối="" cùng="" kết="" thúc="" bài="" '="" trạng="" thái="" làm...="" "#current_user="" có="" statused"="" kết="" thúc="" kết="" thúc="" bạn="" cũng="" có="" thể="" đặt="" logger="" của="" riêng="" bạn.="" lớp="" mylogger="" def="" warning(message)="" đặt="" "đây="" là="" một="" cảnh="" báo:="" #message"="" kết="" thúc="" lớp="" api="">< grape::api="" logger="" giúp="" làm="" def="" logger="" api.logger="" kết="" thúc="" cuối="" cùng="" nhận="" được="" '="" trạng="" thái="" làm="" logger.warning="" "#current_user="" có="" statused"="" kết="" thúc="" kết="" thúc="" cho="" tương="" tự="" như="" lan="" can="" yêu="" cầu="" đăng="" nhập="" thử="" grape_logging="" hay="" nho="" middleware="" logger="" đá="" quý.="" api="" định="" dạng="" api="" của="" bạn="" có="" thể="" tuyên="" bố="" những="" loại="" nội="" dung="" để="" hỗ="" trợ="" bằng="" cách="" sử="" dụng="" content_type.="" nếu="" bạn="" không="" chỉ="" định="" bất="" kỳ,="" nho="" sẽ="" hỗ="" trợ="" xml,="" json,="" nhị="" phân="" và="" txt="" nội="" dung="" loại.="" các="" định="" dạng="" mặc="" định="" là:="" txt;="" bạn="" có="" thể="" thay="" đổi="" điều="" này="" với="" default_format.="" về="" cơ="" bản,="" api="" hai="" bên="" dưới="" là="" tương="" đương.="" lớp="" twitter::api="">< grape::api="" #="" không="" có="" tờ="" khai="" content_type,="" do="" đó,="" nho="" sử="" dụng="" mặc="" định="" kết="" thúc="" lớp="" twitter::api="">< grape::api="" #="" khai="" báo="" sau="" đây="" là="" tương="" đương="" với="" content_type="" mặc="" định:="" xml,="" 'ứng="" dụng/xml'="" content_type:="" json,="" 'ứng="" dụng/json'="" content_type:="" nhị="" phân,="" 'ứng="" dụng/octet-suối'="" content_type:="" txt,="" '="" text/plain'="" default_format:="" txt="" cuối="" nếu="" bạn="" khai="" báo="" bất="" content_type="" nào,="" nho="" mặc="" định="" sẽ="" được="" ghi="" đè.="" ví="" dụ,="" các="" api="" sau="" sẽ="" chỉ="" hỗ="" trợ="" các:="" xml="" và:="" rss="" nội="" dung-loại,="" nhưng="" không:="" txt,:="" json,="" hoặc:="" nhị="" phân.="" quan="" trọng,="" điều="" này="" có="" nghĩa="" là:="" txt="" định="" dạng="" mặc="" định="" không="" được="" hỗ="" trợ!="" vì="" vậy,="" hãy="" chắc="" chắn="" để="" thiết="" lập="" một="" default_format="" mới.="" lớp="" twitter::api="">< grape::api="" content_type:="" xml,="" 'ứng="" dụng/xml'="" content_type:="" rss,="" 'ứng="" dụng/xml="" +="" rss'="" default_format:="" xml="" cuối="" đăng="" trên="" diễn="" ra="" tự="" động.="" ví="" dụ,="" bạn="" không="" phải="" gọi="" to_json="" trong="" mỗi="" thực="" hiện="" endpoint="" json="" api.="" định="" dạng="" phản="" ứng="" (và="" vì="" thế="" tự="" tuần="" tự)="" được="" xác="" định="" theo="" thứ="" tự="" sau="" đây:="" sử="" dụng="" phần="" mở="" rộng="" tập="" tin,="" nếu="" chỉ="" định.="" nếu="" isjson="" tập="" tin,="" chọn="" định="" dạng="" json.="" sử="" dụng="" giá="" trị="" của="" các="" định="" dạngtham="" số="" trong="" chuỗi="" truy="" vấn,="" nếu="" chỉ="" định.="" sử="" dụng="" các="" định="" dạng="" được="" thiết="" lập="" bởi="" các="" tùy="" chọn="" định="" dạng,="" nếu="" chỉ="" định.="" cố="" gắng="" tìm="" một="" định="" dạng="" được="" chấp="" nhận="" từ="" đầu="" chấp="" nhận.="" sử="" dụng="" định="" dạng="" mặc="" định,="" nếu="" được="" chỉ="" định="" bởi="" các="" tùy="" chọn="" default_format.="" theo="" mặc="" định:="" txt.="" lớp="" multipleformatapi="">< grape::api="" content_type:="" xml,="" 'ứng="" dụng/xml'="" content_type:="" json,="" 'ứng="" dụng/json'="" default_format:="" json="" được:="" xin="" chào="" xin="" chào:="" 'thế="" giới'="" kết="" thúc="" cuối="" cùng="" get="" ello="" (với="" một="" chấp="" nhận:="" tiêu="" đề)="" không="" có="" tiện="" ích="" mở="" rộng="" hoặc="" một="" định="" dạng="" tham="" số,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" json="" (định="" dạng="" mặc="" định).="" có="" có="" một="" phần="" mở="" rộng="" được="" công="" nhận,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" xml.="" get="" ello?="" định="" dạng="xml" có="" một="" tham="" số="" định="" dạng="" được="" công="" nhận,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" xml.="" get="" định="" dạng="json" có="" một="" phần="" mở="" rộng="" được="" công="" nhận="" (trong="" đó="" sẽ="" ưu="" tiên="" hơn="" các="" tham="" số="" định="" dạng),="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" xml.="" get="" (với="" chấp="" nhận="" một:="" header)="" có="" phần="" mở="" rộng,="" nhưng="" mở="" rộng="" không="" được="" công="" nhận,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" json="" (định="" dạng="" mặc="" định).="" get="" với="" một="" chấp="" nhận:="" ứng="" dụng/xml="" tiêu="" đề="" có="" phần="" mở="" rộng="" không="" được="" công="" nhận,="" nhưng="" tiêu="" đề="" chấp="" nhận="" tương="" ứng="" với="" một="" định="" dạng="" được="" công="" nhận,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" xml.="" get="" với="" một="" chấp="" nhận:="" text/plain="" tiêu="" đề="" có="" một="" phần="" mở="" rộng="" không="" được="" công="" nhận="" và="" một="" tiêu="" đề="" chấp="" nhận="" không="" được="" công="" nhận,="" do="" đó,="" nó="" sẽ="" phản="" ứng="" với="" json="" (định="" dạng="" mặc="" định).="" bạn="" có="" thể="" ghi="" đè="" lên="" các="" quá="" trình="" này="" một="" cách="" rõ="" ràng="" bằng="" cách="" xác="" định="" env'api.format'="" trong="" api="" chính="" nó.="" ví="" dụ,="" các="" api="" sau="" đây="" sẽ="" cho="" phép="" bạn="" tải="" lên="" tập="" tin="" tùy="" ý="" và="" trở="" lại="" các="" nội="" dung="" như="" bản="" đính="" kèm="" với="" đúng="" loại="" mime.="" lớp="" twitter::api="">< grape::api="" bài="" 'đính="" kèm'="" làm="" filename="params:file:filename" content_type="" mime::types.type_for="" (tên="" tập="" tin)="" 0.to_s="" env'api.format'=":" #="" nhị="" phân="" có="" là="" không="" có="" định="" dạng="" cho:="" nhị="" phân,="" dữ="" liệu="" sẽ="" được="" trả="" lại="" "như="" là"="" tiêu="" đề="" 'content-disposition',="" "tập="" tin="" đính="" kèm;="" filename="UTF-8''" #cgi.escape(filename)"params:file:tempfile.read="" kết="" thúc="" kết="" thúc="" bạn="" có="" thể="" có="" api="" của="" bạn="" chỉ="" có="" thể="" đáp="" ứng="" với="" một="" định="" dạng="" duy="" nhất="" với="" định="" dạng.="" nếu="" bạn="" sử="" dụng="" điều="" này,="" các="" api="" sẽ="" không="" đáp="" ứng="" với="" phần="" mở="" rộng="" tệp="" khác="" hơn="" so="" với="" quy="" định="" trong="" định="" dạng.="" ví="" dụ,="" hãy="" xem="" xét="" các="" api="" sau="" đây.="" lớp="" singleformatapi="">< grape::api="" định="" dạng:="" json="" được:="" xin="" chào="" xin="" chào:="" 'thế="" giới'="" kết="" thúc="" cuối="" cùng="" get/hello="" sẽ="" phản="" ứng="" với="" json.="" get="" sẽ="" phản="" ứng="" với="" json.="" nhận="" được="" nhận="" được="" ello.foobar,="" hoặc="" bất="" kỳ="" phần="" mở="" rộng="" khác="" sẽ="" phản="" ứng="" với="" một="" mã="" lỗi="" http="" 404.="" get="" ello?="" định="" dạng="xml" sẽ="" phản="" ứng="" với="" một="" mã="" lỗi="" http="" 406,="" bởi="" vì="" định="" dạng="" xml="" được="" chỉ="" định="" bởi="" tham="" số="" yêu="" cầu="" không="" được="" hỗ="" trợ.="" nhận="" được="" ello="" với="" một="" chấp="" nhận:="" ứng="" dụng/xml="" tiêu="" đề="" sẽ="" vẫn="" trả="" lời="" json,="" kể="" từ="" khi="" nó="" không="" có="" thể="" thương="" lượng="" một="" công="" nhận="" loại="" nội="" dung="" từ="" các="" tiêu="" đề="" và="" json="" là="" mặc="" định="" có="" hiệu="" quả.="" các="" định="" dạng="" áp="" dụng="" để="" phân="" tích,="" quá.="" api="" sau="" đây="" sẽ="" chỉ="" trả="" lời="" các="" loại="" nội="" dung="" json="" và="" sẽ="" không="" phân="" tích="" bất="" kỳ="" đầu="" vào="" khác="" hơn="" so="" với="" ứng="" dụng/json,="" application/x-www-form-urlencoded,="" nhiều="" phần="" dữ="" liệu="" biểu="" mẫu,="" phần/có="" liên="" quan="" và="" nhiều="" phần/hỗn="" hợp.="" tất="" cả="" các="" yêu="" cầu="" khác="" sẽ="" không="" thành="" công="" với="" một="" mã="" lỗi="" http="" 406.="" lớp="" twitter::api="">< grape::api="" định="" dạng:="" kết="" thúc="" json="" khi="" loại="" nội="" dung="" bỏ="" qua,="" nho="" sẽ="" trở="" về="" một="" mã="" lỗi="" 406="" trừ="" khi="" default_format="" được="" xác="" định.="" api="" sau="" đây="" sẽ="" cố="" gắng="" phân="" tích="" cú="" pháp="" bất="" kỳ="" dữ="" liệu="" mà="" không="" có="" một="" loại="" nội="" dung="" bằng="" cách="" sử="" dụng="" một="" phân="" tích="" cú="" pháp="" json.="" lớp="" twitter::api="">< grape::api="" định="" dạng:="" json="" default_format:="" json="" cuối="" nếu="" bạn="" kết="" hợp="" các="" định="" dạng="" với="" rescue_from:="" tất="" cả,="" lỗi="" sẽ="" được="" trả="" lại="" bằng="" cách="" sử="" dụng="" cùng="" một="" định="" dạng.="" nếu="" bạn="" không="" muốn="" hành="" vi="" này,="" thiết="" lập="" các="" định="" dạng="" lỗi="" mặc="" định="" với="" default_error_formatter.="" lớp="" twitter::api="">< grape::api="" định="" dạng:="" json="" content_type:="" txt,="" '="" text/plain'="" default_error_formatter:="" txt="" cuối="" các="" định="" dạng="" tùy="" chỉnh="" cho="" hiện="" tại="" và="" bổ="" sung="" các="" loại="" có="" thể="" được="" định="" nghĩa="" với="" một="" proc.="" lớp="" twitter::api="">< grape::api="" content_type:="" xls,="" 'ứng="" dụng="" excel'="" định="" dạng:="" xls,-=""> (đối tượng, env) kết thúc object.to_xls
Bạn cũng có thể sử dụng một mô-đun hoặc lớp học.
Mô-đun XlsFormatter def (đối tượng, env) object.to_xls cuối cùng kết thúc lớp Twitter::API < grape::api="" content_type:="" xls,="" 'ứng="" dụng="" excel'="" định="" dạng:="" xls,="" cuối="" cùng="" xlsformatter="" được="" xây="" dựng="" trong="" định="" dạng="" là="" như="" sau.="" :="" json:="" sử="" dụng="" to_json="" của="" đối="" tượng="" khi="" có="" sẵn,="" nếu="" không="" gọi:="" xml:="" sử="" dụng="" to_xml="" của="" đối="" tượng="" khi="" có="" thể,="" thường="" thông="" qua="" multixml,="" nếu="" không="" hãy="" gọi="" to_s="" :="" txt:="" sử="" dụng="" đối="" tượng="" to_txt="" khi="" có="" sẵn,="" nếu="" không="" to_s="" :="" serializable_hash:="" sử="" dụng="" của="" đối="" tượng="" serializable_hash="" khi="" có="" sẵn,="" nếu="" không="" dự="" phòng="" để:="" json="" :="" nhị="" phân:="" dữ="" liệu="" sẽ="" được="" trả="" lại="" "như="" là"="" các="" trạng="" thái="" đáp="" ứng="" cho="" biết="" không="" có="" nội="" dung="" theo="" quy="" định="" của="" rack="" ở="" đây="" sẽ="" bỏ="" qua="" đăng="" trên="" và="" các="" tổ="" chức="" cơ="" thể="" -="" mặc="" dù="" không="" nên="" có="" không="" -="" sẽ="" không="" được="" thay="" đổi.="" jsonp="" nho="" hỗ="" trợ="" jsonp="" thông="" qua="" rack::jsonp,="" một="" phần="" của="" đá="" quý="" rack-đã="" đóng="" góp.="" thêm="" rack-đã="" đóng="" góp="" của="" bạn="" gemfile.="" yêu="" cầu="" '="" rack/đã="" đóng="" góp'="" lớp="" api="">< grape::api="" sử="" dụng="" định="" dạng="" rack::jsonp:="" json="" được="" '="" làm="" 'hello="" world'="" kết="" thúc="" kết="" thúc="" clyde="" nho="" hỗ="" trợ="" clyde="" thông="" qua="" rack::cors,="" một="" phần="" của="" đá="" quý="" rack-clyde.="" thêm="" rack-clyde="" để="" gemfile="" của="" bạn,="" sau="" đó="" sử="" dụng="" trung="" gian="" trong="" tập="" tin="" của="" bạn.="" yêu="" cầu="" '="" rack/clyde'="" rack::cors="" cho="" phép="" sử="" dụng="" làm="" nguồn="" gốc="" ''="" tài="" nguyên="" '',="" tiêu="" đề::="" bất="" kỳ,="" phương="" pháp::="" có="" được="" kết="" thúc="" cuối="" cùng="" chạy="" twitter::api="" loại="" nội="" dung="" loại="" nội="" dung="" được="" thiết="" lập="" bởi="" các="" định="" dạng.="" bạn="" có="" thể="" ghi="" đè="" lên="" các="" loại="" nội="" dung="" các="" phản="" ứng="" tại="" thời="" gian="" chạy="" bằng="" cách="" đặt="" tiêu="" đề="" content-type.="" lớp="" api="">< grape::api="" nhận="" được="" '="" home_timeline_js'="" làm="" content_type="" 'ứng="" dụng/javascript'="" "trạng="" thái="" var="..;" "="" kết="" thúc="" kết="" thúc="" định="" dạng="" dữ="" liệu="" api="" nho="" chấp="" nhận="" và="" phân="" tích="" dữ="" liệu="" đầu="" vào="" được="" gửi="" với="" các="" phương="" pháp="" bài="" và="" đặt="" như="" được="" diễn="" tả="" trong="" phần="" thông="" số="" ở="" trên.="" nó="" cũng="" hỗ="" trợ="" định="" dạng="" tùy="" chỉnh="" dữ="" liệu.="" bạn="" phải="" kê="" khai="" bổ="" sung="" nội="" dung-các="" loại="" thông="" qua="" content_type="" và="" tùy="" chọn="" cung="" cấp="" một="" phân="" tích="" cú="" pháp="" thông="" qua="" phân="" tích="" cú="" pháp="" trừ="" khi="" một="" phân="" tích="" cú="" pháp="" là="" đã="" có="" sẵn="" trong="" nho="" để="" cho="" phép="" một="" định="" dạng="" tùy="" chỉnh.="" phân="" tích="" cú="" pháp="" có="" thể="" là="" một="" chức="" năng="" hoặc="" một="" lớp="" học.="" với="" một="" phân="" tích="" cú="" pháp,="" phân="" tích="" dữ="" liệu="" có="" sẵn="" "như-là"ở="" env''.="" nếu="" không="" có="" một="" phân="" tích="" cú="" pháp,="" dữ="" liệu="" có="" sẵn="" "như-là"="" và="" env'api.request.input'.="" ví="" dụ="" sau="" là="" một="" phân="" tích="" cú="" pháp="" tầm="" thường="" sẽ="" chỉ="" định="" bất="" kỳ="" đầu="" vào="" với="" "văn="" bản/tuỳ="" chỉnh"="" content-type="" để:="" giá="" trị.="" tham="" số="" này="" sẽ="" có="" sẵn="" thông="" qua="" params:value="" bên="" trong="" gọi="" api.="" mô-đun="" customparser="" def="" (đối="" tượng,="" env)="" giá="" trị:="" object.to_s="" kết="" thúc="" kết="" thúc="" content_type:="" txt,="" '="" text/plain'="" content_type:="" 'văn="" bản/custom'="" tuỳ="" chỉnh,="" phân="" tích="" cú="" pháp:="" tuỳ="" chỉnh,="" customparser="" đặt="" 'giá="" trị'="" để="" kết="" thúc="" params:value="" bạn="" có="" thể="" gọi="" các="" api="" trên="" như="" sau.="" curl="" -="" đặt="" -d="" 'dữ="" liệu'="" x="" ':="" 9292/giá="" trị="" '="" -h="" nội="" dung-type:="" text="" tuỳ="" chỉnh="" -="" v="" bạn="" có="" thể="" vô="" hiệu="" hóa="" phân="" tích="" cú="" pháp="" cho="" một="" loại="" nội="" dung="" với="" nil.="" ví="" dụ:="" phân="" tích="" cú="" pháp:="" json,="" nil="" sẽ="" vô="" hiệu="" hóa="" json="" phân="" tích="" hoàn="" toàn.="" các="" yêu="" cầu="" dữ="" liệu="" sau="" đó="" có="" sẵn="" như="" là-trong="" env''.="" yên="" mô="" hình="" đại="" diện="" nho="" hỗ="" trợ="" một="" loạt="" các="" cách="" trình="" bày="" dữ="" liệu="" của="" bạn="" với="" sự="" giúp="" đỡ="" từ="" một="" phương="" pháp="" chung="" hiện="" tại,="" chấp="" nhận="" hai="" lập="" luận:="" các="" đối="" tượng="" được="" trình="" bày="" và="" các="" tùy="" chọn="" liên="" kết="" với="" nó.="" băm="" tùy="" chọn="" có="" thể="" bao="" gồm:="" với,="" đó="" xác="" định="" các="" thực="" thể="" để="" lộ.="" nho="" thực="" thể="" thêm="" đá="" quý="" thực="" thể="" nho="" gemfile="" của="" bạn.="" xin="" vui="" lòng="" tham="" khảo="" tài="" liệu="" hướng="" dẫn="" tổ="" chức="" nho="" cho="" biết="" thêm="" chi="" tiết.="" ví="" dụ="" sau="" cho="" thấy="" nhiều="" trạng="" thái.="" mô-đun="" api="" mô-đun="" đơn="" vị="" lớp="" tình="" trạng="">< grape::entity="" vạch="" trần:="" user_name="" lộ:="" văn="" bản,="" tài="" liệu:="" loại:="" 'string',="" desc:="" 'tình="" trạng="" cập="" nhật="" văn="" bản.'="" vạch="" trần:="" ip,="" nếu:="" loại::="" vạch="" trần="" đầy="" đủ:="" user_type,:="" user_id,="" nếu:-=""> (tình trạng, tuỳ chọn) khu vực?vạch trần: tiêu hóa do tình trạng, vạch trần thúc Digest:: MD5.hexdigest() tùy chọn: trả lời, bằng cách sử dụng: API::Status, như:: trả lời cuối cùng kết thúc lớp tình trạng < grape::api="" phiên="" bản="" 'v1'="" desc="" 'trạng="" thái="" chỉ="" mục'="" làm="" chủ:="" api::entities::status.documentation="" cuối="" cùng="" nhận="" được="" '="" trạng="" thái="" làm="" trạng="" thái="loại" =="" current_user.admin?="" :="" đầy="" đủ::="" mặc="" định="" trạng="" thái="" hiện="" tại,="" với:="" api::entities::status,="" loại:="" loại="" kết="" thúc="" cuối="" cùng="" kết="" thúc="" bạn="" có="" thể="" sử="" dụng="" tài="" liệu="" hướng="" dẫn="" tổ="" chức="" trực="" tiếp="" trong="" khối="" chủ="" bằng="" cách="" sử="" dụng:="" entity.documentation.="" mô-đun="" api="" lớp="" tình="" trạng="">< grape::api="" phiên="" bản="" 'v1'="" desc="" 'tạo="" ra="" một="" tình="" trạng'="" chủ="" yêu="" cầu:="" tất="" cả,="" ngoại="" trừ::="" ip,="" bằng="" cách="" sử="" dụng:="" api::entities::status.documentation.except(:id)="" kết="" thúc="" bài="" '="" tình="" trạng="" làm="" status.create!="" kết="" thúc="" chủ="" đầu="" cuối="" bạn="" có="" thể="" trình="" bày="" với="" nhiều="" thực="" thể="" bằng="" cách="" sử="" dụng="" một="" đối="" số="" biểu="" tượng="" tùy="" chọn.="" nhận="" được="" '="" trạng="" thái="" làm="" trạng="" thái="(1).per(20)" hiện="" tại:="" total_page,="" 10="" hiện="" tại:="" per_page,="" hiện="" nay="" 20:="" trạng="" thái,="" tình="" trạng,="" với:="" api::entities::status="" cuối="" các="" phản="" ứng="" sẽ="" total_page:="" 10="" per_page:="" 20,="" tình="" trạng:="" ngoài="" việc="" tổ="" chức="" một="" cách="" riêng="" biệt="" các="" thực="" thể,="" nó="" có="" thể="" hữu="" ích="" để="" đặt="" chúng="" như="" là="" các="" lớp="" học="" namespaced="" bên="" dưới="" các="" mẫu="" đại="" diện="" cho="" họ.="" lớp="" học="" tình="" trạng="" def="" thực="" thể="" (tự)="" kết="" thúc="" lớp="" học="" tổ="" chức="">< vạch="" trần="" grape::entity:="" văn="" bản,:="" user_id="" kết="" thúc="" kết="" thúc="" nếu="" bạn="" tổ="" chức="" các="" cơ="" quan="" của="" bạn="" bằng="" cách="" này,="" nho="" sẽ="" tự="" động="" phát="" hiện="" các="" lớp="" học="" tổ="" chức="" và="" sử="" dụng="" nó="" để="" trình="" bày="" các="" mô="" hình="" của="" bạn.="" trong="" ví="" dụ="" này,="" nếu="" bạn="" thêm="" vào="" hiện="" tại="" đến="" điểm="" cuối="" của="" bạn,="" nho="" sẽ="" tự="" động="" phát="" hiện="" rằng="" có="" là="" một="" lớp="" status::entity="" và="" sử="" dụng="" như="" là="" tổ="" chức="" đại="" diện.="" điều="" này="" vẫn="" có="" thể="" được="" ghi="" đè="" bằng="" cách="" sử="" dụng="" các:="" với="" tùy="" chọn="" hoặc="" một="" rõ="" ràng="" đại="" diện="" cho="" cuộc="" gọi.="" bạn="" có="" thể="" trình="" bày="" băm="" với="" grape::presenters::presenter="" để="" giữ="" cho="" mọi="" thứ="" phù="" hợp.="" nhận="" được="" '="" người="" sử="" dụng="" hiện="" id:="" 10,="" tên::="" dgz,="" với:="" grape::presenters::presenter="" cuối="" các="" phản="" ứng="" sẽ="" id:="" 10,="" tên:="" 'dgz'="" nhận="" được="" '="" người="" dùng="" hiện="" tại:="" id,="" 10="" hiện="" tại:="" tên,:="" dgz="" cuối="" hypermedia="" và="" kêu="" la="" bạn="" có="" thể="" sử="" dụng="" kêu="" la="" để="" render="" hal="" hoặc="" bộ="" sưu="" tập="" +="" json="" với="" sự="" giúp="" đỡ="" của="" nho-kêu="" la,="" mà="" xác="" định="" một="" tuỳ="" chỉnh="" định="" dạng="" json="" và="" cho="" phép="" trình="" bày="" những="" từ="" khoá="" hiện="" tại="" của="" nho.="" rabl="" bạn="" có="" thể="" sử="" dụng="" rabl="" mẫu="" với="" sự="" giúp="" đỡ="" của="" gem="" nho-rabl,="" trong="" đó="" xác="" định="" một="" tuỳ="" chỉnh="" nho="" rabl="" định="" dạng.="" mô="" hình="" hoạt="" động="" serializers="" bạn="" có="" thể="" sử="" dụng="" các="" hoạt="" động="" mô="" hình="" serializers="" serializers="" với="" sự="" giúp="" đỡ="" của="" gem="" nho-active_model_serializers,="" trong="" đó="" xác="" định="" một="" định="" dạng="" tùy="" chỉnh="" nho="" ams.="" gửi="" nguyên="" hoặc="" không="" có="" dữ="" liệu="" nói="" chung,="" sử="" dụng="" định="" dạng="" nhị="" phân="" để="" gửi="" dữ="" liệu="" thô.="" lớp="" api="">< grape::api="" nhận="" được="" '/="" tập="" tin'="" làm="" content_type="" 'ứng="" dụng/octet-suối'="" file.binread="" ''="" đầu="" cuối="" bạn="" có="" thể="" thiết="" lập="" cơ="" thể="" phản="" ứng="" một="" cách="" rõ="" ràng="" với="" cơ="" thể.="" lớp="" api="">< grape::api="" nhận="" được="" '="" làm="" content_type="" 'text/plain'="" cơ="" thể="" 'hello="" world'="" #="" giá="" trị="" trả="" lại="" bỏ="" qua="" đầu="" cuối="" sử="" dụng="" cơ="" thể="" sai="" để="" trở="" về="" 204="" không="" có="" nội="" dung="" mà="" không="" có="" bất="" kỳ="" dữ="" liệu="" hoặc="" loại="" nội="" dung.="" bạn="" cũng="" có="" thể="" thiết="" lập="" các="" phản="" ứng="" với="" một="" tập="" tin="" với="" các="" tập="" tin.="" lớp="" api="">< grape::api="" nhận="" được="" '="" làm="" file="" '/="" path/to/tập="" tin'="" kết="" thúc="" kết="" thúc="" nếu="" bạn="" muốn="" một="" tập="" tin="" để="" được="" xem="" trực="" tiếp="" bằng="" cách="" sử="" dụng="" rack::chunked,="" sử="" dụng="" dòng.="" lớp="" api="">< grape::api="" nhận="" được="" '="" làm="" dòng="" cuối="" cùng="" kết="" thúc="" '/="" path/to/tập="" tin'="" xác="" thực="" cơ="" bản="" và="" tiêu="" hóa="" auth="" nho="" đã="" được="" xây="" dựng="" trong="" xác="" thực="" cơ="" bản="" và="" tiêu="" hóa="" (khối="" nhất="" định="" được="" thực="" hiện="" trong="" bối="" cảnh="" hiện="" tại="" endpoint).="" xác="" thực="" áp="" dụng="" cho="" không="" gian="" tên="" hiện="" tại="" và="" con="" cái,="" nhưng="" không="" phải="" cha="" mẹ.="" http_basic="" làm="" tên="" người="" dùng,="" mật="" khẩu="" #="" xác="" minh="" mật="" khẩu="" của="" người="" dùng="" ở="" đây="" 'thử="" nghiệm'=""> ‘password1’ username == mật khẩu kết thúc
http_digest (lĩnh vực: ‘Kiểm tra Api’, đục: ‘ứng dụng secret’) để tra cứu # tên người dùng mật khẩu của người dùng ở đây ‘user1’ => ‘password1’ tên người dùng cuối
Đăng ký tuỳ chỉnhmiddleware cho xác thực
Nho có thể sử dụng tùy chỉnh Middleware cho xác thực. Làm thế nào để thực hiện trung gian có một cái nhìn tại Rack::Auth::Basic hoặc tương tự như việc triển khai.
Đăng ký một Middleware, bạn cần các tùy chọn sau:
nhãn – tên của bạn nhận thực để sử dụng nó sau này
MiddlewareClass – MiddlewareClass để sử dụng cho xác thực
option_lookup_proc – A Proc với một đối số để tra cứu các lựa chọn tại thời gian chạy (quay trở lại giá trị là một mảng là tham số cho Middleware).
Ví dụ:
Mô tả và kiểm tra một API
Tuyến đường nho có thể được phản ánh tại thời gian chạy. Đáng chú ý là, điều này có thể hữu ích cho việc tạo ra các tài liệu hướng dẫn.
Nho cho thấy nhiều mảng của các phiên bản API và biên soạn các tuyến đường. Mỗi tuyến đường có chứa một route_prefix, route_version, route_namespace, route_method, route_path và route_params. Bạn có thể thêm đường tuỳ chỉnh cài đặt các siêu dữ liệu đường với route_setting.
lớp TwitterAPI < grape::api="" phiên="" bản="" 'v1'="" desc="" 'bao="" gồm="" các="" tuỳ="" chỉnh="" cài="" đặt.'="" route_setting:="" tùy="" chỉnh,="" key:="" 'giá="" trị'="" nhận="" được="" kết="" thúc="" cuối="" cùng="" kiểm="" tra="" các="" tuyến="" đường="" tại="" thời="" gian="" chạy.="" twitterapi::versions="" #="" sản="" lượng="" 'v1',="" 'v2'="" twitterapi::routes="" #="" sản="" lượng="" một="" mảng="" của="" các="" đối="" tượng="" grape::route="" twitterapi::routes0.version="" #=""> ‘v1’ TwitterAPI::routes0.description # => ‘bao gồm các thiết đặt tùy chỉnh.’ TwitterAPI::routes0.settings: # tùy chỉnh => phím: ‘giá trị’ lưu ý Route #route_xyz phương pháp đã được deprecated kể từ 0.15.0.
Xin vui lòng sử dụng tuyến đường #xyz thay thế.
Lưu ý rằng sự khác biệt của các tuyến đường #options và đường #settings.
Các tùy chọn có thể được gọi từ tuyến đường của bạn, nó nên được thiết lập bởi specifing key và giá trị trên phương pháp động chẳng hạn như có được, đăng bài và đặt. Các cài đặt cũng có thể được gọi từ tuyến đường của bạn, nhưng nó nên được thiết lập bởi specifing key và giá trị trên route_setting.
Hiện tại tuyến đường và điểm cuối
Nó có thể truy xuất thông tin về các tuyến đường hiện tại từ trong một cuộc gọi API với tuyến đường.
lớp MyAPI < grape::api="" desc="" 'trả="" về="" một="" mô="" tả="" của="" một="" tham="" số.'="" chủ="" yêu="" cầu:="" id,="" loại:="" số="" nguyên,="" desc:="" 'identity.'="" cuối="" cùng="" nhận="" được="" '="" params="" id'="" làm="" route.route_paramsparams:id="" #="" sản="" lượng="" tham="" số="" mô="" tả="" đầu="" cuối="" endpoint="" hiện="" tại="" đáp="" ứng="" yêu="" cầu="" là="" tự="" trong="" api="" khối="" hoặc="" env'api.endpoint'="" ở="" nơi="" khác.="" điểm="" cuối="" này="" có="" một="" số="" đặc="" tính="" thú="" vị,="" chẳng="" hạn="" như="" nguồn="" đó="" cung="" cấp="" cho="" bạn="" truy="" cập="" vào="" khối="" mã="" ban="" đầu="" của="" api="" thực="" hiện.="" điều="" này="" có="" thể="" đặc="" biệt="" hữu="" ích="" cho="" việc="" xây="" dựng="" một="" middleware="" logger.="" lớp="" apilogger="">< grape::middleware::base="" def="" trước="" khi="" tập="" tin="env'api.endpoint'.source.source_location0" dòng="env'api.endpoint'.source.source_location1" logger.debug="" "api="" #file:="" #line"="" kết="" thúc="" kết="" thúc="" trước="" và="" sau="" khi="" khối="" có="" thể="" được="" thực="" hiện="" trước="" hoặc="" sau="" mỗi="" cuộc="" gọi="" api,="" bằng="" cách="" sử="" dụng="" trước,="" sau="" đó,="" before_validation="" và="" after_validation.="" trước="" và="" sau="" khi="" callbacks="" thực="" hiện="" theo="" thứ="" tự="" sau="" đây:="" trước="" khi="" before_validation="" validations="" after_validation="" bước="" 4,="" 5="" và="" 6="" chỉ="" xảy="" ra="" nếu="" xác="" nhận="" thành="" công.="" ví="" dụ="" trước="" khi="" làm="" tiêu="" đề="" 'x-robots-tag',="" 'noindex'="" kết="" thúc="" không="" gian="" tên="" callbacks="" áp="" dụng="" cho="" mỗi="" cuộc="" gọi="" api="" bên="" trong="" và="" bên="" dưới="" không="" gian="" tên="" hiện="" hành:="" lớp="" myapi="">< grape::api="" nhận="" được="" '="" làm="" "root="" -="" [email protected]"="" kết="" thúc="" không="" gian="" tên:="" foo="" trước="" khi="" làm="" @blah="kết" thúc="" 'blah'="" get="" '="" làm="" "gốc="" -="" foo="" -="" [email protected]"="" kết="" thúc="" không="" gian="" tên:="" bar="" có="" được="" '="" làm="" "gốc="" -="" foo="" -="" bar="" -="" [email protected]"="" cuối="" cùng="" kết="" thúc="" cuối="" cùng="" kết="" thúc="" đó="" là="" các="" hành="" vi:="" get="" #="" 'root="" -'="" get="" oo="" #="" 'gốc="" -="" foo="" -="" blah'="" nhận="" được="" oo/bar="" #="" 'gốc="" -="" foo="" -="" thanh="" -="" blah'="" chủ="" trên="" một="" không="" gian="" tên="" (hoặc="" bất="" cứ="" bí="" danh="" bạn="" đang="" sử="" dụng)="" cũng="" sẽ="" có="" sẵn="" khi="" sử="" dụng="" before_validation="" hoặc="" after_validation:="" lớp="" myapi="">< grape::api="" params="" yêu="" cầu:="" blah,="" loại:="" số="" nguyên="" kết="" thúc="" tài="" nguyên="" ':="" blah'="" làm="" after_validation="" làm="" #="" nếu="" chúng="" tôi="" đạt="" đượcvalidations="" điểm="" này="" sẽ="" có="" thông="" qua="" @blah="declared(params," include_missing:="" false):blah="" cuối="" cùng="" nhận="" được="" '="" làm="" @blah.class="" kết="" thúc="" cuối="" cùng="" kết="" thúc="" đó="" là="" các="" hành="" vi:="" nhận="" được="" nhận="" được="" 'fixnum'="" 123="" #="" foo="" #="" 400="" lỗi="" -="" 'blah="" là="" không="" hợp="" lệ'="" versioning="" khi="" một="" gọi="" lại="" được="" định="" nghĩa="" trong="" một="" khối="" phiên="" bản,="" nó="" chỉ="" được="" gọi="" là="" cho="" các="" tuyến="" đường="" được="" xác="" định="" trong="" khối="" đó.="" lớp="" học="" thử="" nghiệm="">< grape::api="" tài="" nguyên:="" foo="" làm="" phiên="" bản="" 'v1',:="" sử="" dụng="">: con đường làm trước khi làm @output = ‘v1-‘ cuối cùng nhận được ‘ /’ làm @output += ‘hello’ kết thúc cuối cùng phiên bản ‘v2’,: sử dụng =>: con đường làm trước khi làm @output = ‘v2-‘ cuối cùng nhận được ‘ /’ làm @output += ‘Xin chào’ kết thúc cuối cùng kết thúc kết thúc
Đó là các hành vi:
Thay đổi hồi đáp
Sử dụng xuất hiện trong bất kỳ gọi lại cho phép bạn thêm dữ liệu vào một phản ứng:
lớp MyAPI < grape::api="" định="" dạng:="" json="" after_validation="" hiện:="" tên,="" params:name="" nếu="" params:name="" cuối="" cùng="" nhận="" được="" '="" chúc="" mừng="" '="" trình="" bày:="" chào="" mừng,="" 'xin="" chào!'="" kết="" thúc="" cuối="" cùng="" đó="" là="" các="" hành="" vi:="" nhận="" được/chào="" mừng="" #="" "lời="" chào":="" "xin="" chào!"="" nhận="" được/chào="" mừng?="" tên="Alan" #="" "tên":="" "alan",="" "lời="" chào":="" "xin="" chào!"="" thay="" vì="" thay="" đổi="" một="" phản="" ứng,="" bạn="" cũng="" có="" thể="" chấm="" dứt="" và="" viết="" lại="" nó="" từ="" bất="" kỳ="" gọi="" lại="" bằng="" cách="" sử="" dụng="" lỗi!,="" trong="" đó="" sau.="" điều="" này="" sẽ="" gây="" ra="" tất="" cả="" các="" bước="" tiếp="" theo="" trong="" quá="" trình="" này="" không="" được="" gọi="" là.="" điều="" này="" bao="" gồm="" cuộc="" gọi="" api="" thực="" tế="" và="" bất="" kỳ="" callbacks="" thả="" neo="" nho="" mặc="" định="" neo="" tất="" cả="" các="" đường="" dẫn="" yêu="" cầu,="" có="" nghĩa="" rằng="" url="" yêu="" cầu="" phải="" phù="" hợp="" với="" từ="" đầu="" đến="" kết="" thúc="" để="" phù="" hợp="" với,="" nếu="" không="" một="" 404="" không="" tìm="" thấy="" được="" trả="" lại.="" tuy="" nhiên,="" điều="" này="" đôi="" khi="" không="" phải="" những="" gì="" bạn="" muốn,="" bởi="" vì="" nó="" không="" luôn="" luôn="" được="" biết="" rõ="" ràng="" những="" gì="" có="" thể="" được="" mong="" đợi="" từ="" các="" cuộc="" gọi.="" điều="" này="" là="" bởi="" vì="" rack-mount="" mặc="" định="" neo="" các="" yêu="" cầu="" để="" phù="" hợp="" với="" từ="" bắt="" đầu="" để="" kết="" thúc,="" hoặc="" không="" phải="" ở="" tất="" cả.="" rails="" giải="" quyết="" vấn="" đề="" này="" bằng="" cách="" sử="" dụng="" một="" neo:="" các="" tùy="" chọn="" sai="" trong="" các="" tuyến="" đường="" của="" bạn.="" ở="" nho="" tùy="" chọn="" này="" có="" thể="" được="" sử="" dụng="" cũng="" như="" khi="" một="" phương="" pháp="" được="" xác="" định.="" ví="" dụ="" khi="" api="" của="" bạn="" cần="" phải="" nhận="" được="" một="" phần="" của="" một="" url,="" ví="" dụ:="" lớp="" twitterapi="">< không="" gian="" tên="" grape::api:="" tình="" trạng="" nhận="" được="" '/(:status)',="" neo:="" sai="" kết="" cuối="" điều="" này="" sẽ="" phù="" hợp="" với="" tất="" cả="" các="" đường="" dẫn="" bắt="" đầu="" với="" 'trạng="" thái="" .="" đó="" là="" một="" trong="" những="" caveat="" mặc="" dù:="" các="" tham="" số="" params:status="" chỉ="" nắm="" giữ="" một="" phần="" đầu="" tiên="" của="" các="" yêu="" cầu="" url.="" may="" mắn="" thay="" điều="" này="" có="" thể="" được="" circumvented="" bằng="" cách="" sử="" dụng="" cú="" pháp="" mô="" tả="" ở="" trên="" con="" đường="" đặc="" điểm="" kỹ="" thuật="" và="" sử="" dụng="" các="" biến="" môi="" trường="" path_info="" rack,="" bằng="" cách="" sử="" dụng="" env="" 'path_info'.="" điều="" này="" sẽ="" giữ="" tất="" cả="" mọi="" thứ="" mà="" đến="" sau="" khi="" 'trạng="" thái="" một="" phần.="" bằng="" cách="" sử="" dụng="" tùy="" chỉnh="" middleware="" bạn="" có="" thể="" làm="" cho="" một="" middleware="" tùy="" chỉnh="" bằng="" cách="" sử="" dụng="" grape::middleware::base.="" nó="" được="" thừa="" hưởng="" từ="" một="" số="" nho="" middlewares="" chính="" thức="" trong="" thực="" tế.="" ví="" dụ,="" bạn="" có="" thể="" viết="" một="" middleware="" đăng="" nhập="" ứng="" dụng="" trường="" hợp="" ngoại="" lệ.="" lớp="" loggingerror="">< grape::middleware::base="" def="" sau="" khi="" trở="" về="" trừ="" khi="" @app_response="" &&="" @app_response0="=" 500="" env'rack.logger'.error="" ("lớn="" lên="" lỗi="" trên="" #env="" 'path_info'")="" kết="" thúc="" kết="" thúc="" middleware="" của="" bạn="" có="" thể="" ghi="" đè="" ứng="" dụng="" phản="" ứng="" như="" sau,="" trừ="" trường="" hợp="" lỗi.="" lớp="" overwriter="">< grape::middleware::base="" def="" sau="" 200,="" 'content-type'=""> ‘ text/plain’, ‘Overwrited.’ kết thúc kết thúc
Rails Middleware
Lưu ý rằng khi bạn đang sử dụng nho gắn trên Lan can bạn không cần phải sử dụng ray middleware, vì nó đã được bao gồm vào ngăn xếp của bạn middleware. Bạn chỉ cần thực hiện của người trợ giúp để truy cập vào các biến env cụ thể.
IP từ xa
Theo mặc định, bạn có thể truy cập từ xa IP này là địa chỉ IP từ xa được thực hiện bởi các Rack. Đôi khi nó là mong muốn để có được IP từ xaLan can-với phong cách ActionDispatch::RemoteIp.
Thêm đá quý ‘actionpack’ đến Gemfile của bạn và yêu cầu ‘action_dispatch/middleware/remote_ip.rb’. Sử dụng trung gian trong API của bạn và phơi bày một helper client_ip. Xem tài liệu này cho các tùy chọn bổ sung.
lớp API < grape::api="" sử="" dụng="" actiondispatch::remoteip="" người="" trợ="" giúp="" làm="" def="" client_ip="" env'action_dispatch.remote_ip'.to_s="" kết="" thúc="" kết="" thúc="" nhận="" được:="" remote_ip="" làm="" ip:="" client_ip="" kết="" thúc="" kết="" thúc="" bài="" kiểm="" tra="" viết="" rspec="" bạn="" có="" thể="" thử="" nghiệm="" một="" api="" nho="" với="" rspec="" bằng="" cách="" làm="" cho="" các="" yêu="" cầu="" http="" và="" kiểm="" tra="" các="" phản="" ứng.="" yêu="" cầu="" mô="" tả="" 'spec_helper'="" twitter::api="" bao="" gồm="" rack::test::methods="" def="" app="" twitter::api="" bối="" cảnh="" kết="" thúc="" 'get="" pi/statuses/public_timeline'="" làm="" 'trả="" về="" một="" mảng="" sản="" phẩm="" nào="" của="" tình="" trạng'="" nhận="" được="" '/="" trạng="" thái-api-public_timeline'="" mong="" đợi="" (last_response.status)="" đến="" eq(200)="" expect(json.parse(last_response.body))="" .để="" eq="" kết="" thúc="" cuối="" cùng="" bối="" cảnh="" '="" get="" pi/trạng="" thái="" id'="" làm="" 'trở="" về="" trạng="" thái="" của="" id'="" do="" tình="" trạng="Status.create!" nhận="" được="" "/="" trạng="" thái-api-#"="" mong="" đợi="" (last_response.body)="" .để="" eq="" status.to_json="" kết="" thúc="" cuối="" cùng="" kết="" thúc="" không="" cách="" chuẩn="" gửi="" các="" mảng="" của="" các="" đối="" tượng="" thông="" qua="" http="" nhận="" được="" một,="" như="" vậy="" đăng="" dữ="" liệu="" json="" và="" xác="" định="" loại="" nội="" dung="" đúng.="" mô="" tả="" twitter::api="" bối="" cảnh="" '="" bài/api/trạng="" thái'="" làm="" 'tạo="" ra="" nhiều="" trạng="" thái'="" do="" trạng="" thái="văn" bản:="" '...',="" văn="" bản:="" '...'="" đăng="" bài="" '/="" api/trạng="" thái',="" statuses.to_json,="" 'content_type'=""> ‘ứng dụng/json’ mong đợi (last_response.body) .để eq 201 kết thúc cuối cùng kết thúc
Trên máy bay
Bạn có thể thử nghiệm với các khuôn khổ dựa trên RSpec, bao gồm Airborne, sử dụng thử nghiệm rack để thực hiện yêu cầu.
yêu cầu ‘bay’ Airborne.configure do cấu hình config.rack_app = Twitter::API cuối cùng mô tả Twitter::API làm bối cảnh ‘ GET /api/trạng thái /: id’ làm ‘trở về trạng thái của id’ do tình trạng = Status.create! nhận được “/ trạng thái-api-#” expect_json(status.as_json) kết thúc cuối cùng kết thúc
MiniTest
Thử nghiệm bằng văn bản với đường ray
Mô tả Twitter::API làm bối cảnh ‘GET /api/statuses/public_timeline’ làm ‘trả về một mảng sản phẩm nào của tình trạng’ nhận được ‘/ trạng thái-api-public_timeline’ mong đợi (response.status) đến eq(200) expect(JSON.parse()) .để eq kết thúc cuối cùng bối cảnh ‘ GET /api/trạng thái /: id’ làm ‘trở về trạng thái của id’ do tình trạng = Status.create! nhận được “/ trạng thái-api-#” mong đợi () .để eq status.to_json kết thúc cuối cùng kết thúc
Trong Ray, HTTP yêu cầu xét nghiệm nào đi vào nhóm spec/yêu cầu. Bạn có thể mã API của bạn đi vào ứng dụng/api – bạn có thể kết hợp đó bố trí dưới spec bằng cách thêm sau đây trong spec/rails_helper.rb.
RSpec.configure do cấu hình config.include RSpec::Rails::RequestExampleGroup, gõ:: yêu cầu, file_path: /spec\/api/kết thúc
MiniTest
Stubbing người trợ giúp
Bởi vì người trợ giúp được trộn lẫn dựa trên bối cảnh khi một endpoint được xác định, nó có thể được khó khăn để còn sơ khai hoặc thử chúng để thử nghiệm. Phương pháp Grape::Endpoint.before_each có thể giúp bằng cách cho phép bạn để xác định hành vi trên endpoint sẽ chạy trước mọi yêu cầu.
Mô tả ‘một điểm cuối cần người trợ giúp stubbed’ làm trước khi làm Grape::Endpoint.before_each làm điểm cuối cho phép (endpoint) .để receive(:helper_name).and_return(‘desired_value’) đầu cuối sau khi làm Grape::Endpoint.before_each nil kết thúc nó ‘khai helper’ làm… kết thúc kết thúc
Tải lại thay đổi API phát triển
Tải lại trong các ứng dụng Rack
# Auto-load API và các thư mục con của nó (‘ứng dụng’, ‘api’), glob: (”, ‘.rb’) config.autoload_paths = thư mục (‘ứng dụng’, ‘api’, ”)
Tạo config/initializers/reload_api.rb.
Hiệu suất giám sát
Sau đây hiện đang được hỗ trợ:
endpoint_run.grape
Thực hiện chính của một điểm cuối, bao gồm các bộ lọc và rendering.
Endpoint – ví dụ endpoint
Thực hiện của khối nội dung chính của điểm cuối.
Endpoint – ví dụ endpoint
loại – loại bộ lọc (trước đây, before_validation, after_validation, sau khi)
Xem các tài liệu ActiveSupport::Notifications để biết thông tin về làm thế nào để đăng ký những sự kiện này.
Giám sát sản phẩm
Nho tích hợp với các bên thứ ba công cụ sau đây:
Di tích mới – được xây dựng trong hỗ trợ từ v3.10.0 chính thức newrelic_rpm đá quý, đá quý cũng newrelic-nho
Đóng góp cho nho
Nho là việc của hàng trăm của những người đóng góp. Bạn đang khuyến khích để gửi yêu cầu kéo, đề xuất các tính năng và thảo luận về các vấn đề.
Bản quyền
Một cái gì đó đã đi sai với yêu cầu đó. Xin vui lòng thử lại.

SHARE
Previous articletest inpage
Next articleHạt nho lợi ích cho sức khỏe tim mạch, da và não của bạn
Chuyên cung cấp các loại đặc sản Ninh Thuận như: say rim đường, muối ớt, Rượu nho Ninh Thuận nguyên chất, khô mực, nước mắm nhĩ, tỏi, rau câu chân vịt... Đặt hàng : 01.222.00.66.99