Làm thế nào để tôi POST một nút mới?


16

Tôi đã giới thiệu nhiều liên kết bao gồm:

Tôi đã thử một số cách để POST một nút mới lên một trang web Drupal, nhưng tôi đã thất bại. Tôi đã tạo một CCK mẫu để lưu trữ dữ liệu của sinh viên với tên, tuổi, giới tính, DOB và thêm một số danh sách.

Tôi đã cài đặt và định cấu hình mô-đun Dịch vụ (D7) và tạo điểm cuối dịch vụ tại các dịch vụ.
Như mong đợi, GET là cách dễ nhất để lấy chi tiết của một nút trong JSON. http://localhost/drupal/services/nodechỉ đơn giản là liệt kê tất cả các nút.

Tôi vẫn không thể tìm ra cách sử dụng phương thức POST .

  1. Tôi muốn tìm kiếm các sinh viên có tên chứa john . Tôi đã thử localhost/drupal/services/node&node[name]=john. Tôi đã sử dụng plugin POST Man cho Chrome nhưng không thành công. Tôi cũng đã thử một số cách khác.

  2. Tôi đã thử thêm một sinh viên mới vào trang web nhưng không thành công.

Bất cứ ai có thể hướng dẫn tôi để làm cho công việc trên tốt?

CẬP NHẬT:

Tôi đã thử thêm các nút mới của loại bài viết . Nó hoạt động tốt. nhưng khi tôi đang cố thêm các nút loại CCK thì nó đang hiển thị " s: 22:" Xác thực CSRF không thành công "; " Đây là ảnh chụp màn hình

Tôi đã đi qua liên kết https://drupal.org/node/2013781

Tôi đã theo dõi session = session_name = session_id nhưng tôi vẫn gặp lỗi.
nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Điều gì xảy ra khi bạn cố gắng POST một nút? Bạn có nhận được một thông báo lỗi? Nếu vậy, nó là cái gì?
Gaelan

Câu trả lời:


22

Hy vọng điều này sẽ giúp bạn,

Đối với Drupal 7

Công cụ được sử dụng:

  • Tiện ích Firefox Poster để kiểm tra và gỡ lỗi. Có thể có các tiện ích bổ sung khác. Nhưng với ví dụ này tôi đang sử dụng tiện ích Firefox.
  • Để giúp chỉnh sửa và xác thực dữ liệu JSON, bạn có thể sử dụng

Yêu cầu HTTP

  • Để thực hiện các yêu cầu HTTP, bạn cần sử dụng POSTER bổ trợ Firefox .

  • Hai phương thức thường được sử dụng cho phản hồi yêu cầu giữa máy khách và máy chủ là:

    • ĐƯỢC
    • BÀI ĐĂNG
  • Sau khi tiện ích được tải xuống. Mở Firefox -> Công cụ -> Poster

    nhập mô tả hình ảnh ở đây

  • Đảm bảo bật xác thực Phiên . Sau khi Dịch vụ được cấu hình đúng, trước khi tạo nút, bạn nên đăng nhập . Sau khi đăng nhập, bạn có thể tạo các nút.

  • Để đăng nhập, hãy sử dụng phương thức POST, với URL như - http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    nhập mô tả hình ảnh ở đây

  • Nếu đó là người dùng hợp lệ thì nó sẽ trả về chi tiết người dùng với ID và Tên phiên . Nếu không hợp lệ, nó sẽ trả về quyền truy cập bị từ chối

    nhập mô tả hình ảnh ở đây

  • Bằng cách sử dụng Tên phiên và ID trong POST Header, chúng tôi có thể tạo các nút mới

    nhập mô tả hình ảnh ở đây

  • Bây giờ sau khi thêm TIÊU ĐỀ, Bạn cần tạo yêu cầu HTTP POST và đảm bảo người dùng nên có quyền để tạo nút.

    nhập mô tả hình ảnh ở đây

  • Nếu nút được tạo, bạn sẽ nhận được phản hồi với liên kết nút

    nhập mô tả hình ảnh ở đây

LƯU Ý: Nếu bạn muốn phản hồi trong JSON thì bạn phải luôn thêm .json vào cuối URL. ví dụ., http://XXXXXXXX.com/test/endpoint/user.json HOẶC http://XXXXXXXX.com/test/endpoint/node.json HOẶC http://XXXXXXXX.com/test/endpoint/user/user_id .json HOẶC http://XXXXXXXX.com/test/endpoint/node/node_id.json


Xin lỗi tôi đã bỏ chọn tùy chọn mã hóa url mẫu trong mô-đun dịch vụ. và đây là phản hồi 401: Không được phép: Ủy quyền CSRF không thành công. Điều gì có thể gây ra điều này? Rất cám ơn
Ramaraju.d

hi @inizio tôi có thể biết trên cơ sở nào bạn đã gán giá trị phiên trong Headers. Bạn có thể làm cho nó rõ ràng. Ví dụ, sessionId tôi nhận được là SESS29af1facda0a866a687d5055f2fade2c nhưng trong câu trả lời của bạn, nó có độ dài hơn!
Ramaraju.d

Giá trị phiên trong HEADERS bao gồm session_name và session_id. tức là., session là biến và giá trị của nó bao gồm session_name = session_id. session = (session_name = session_value)
inizio

Nó nói 401: Không được phép: Xác thực CSRF không thành công. Tôi đã đưa ra sau như tên tiêu đề = phiên value = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d

Vâng, nó đã làm việc. Nhưng vấn đề duy nhất, Điều CCK có tiêu đề, trường_names, phần thân nhưng chỉ có tiêu đề đang được lưu và nút được tạo, nhưng trường phần thân và tên trống. Làm thế nào để khắc phục điều này.
Ramaraju.d

7

Đối với Drupal 7 và Dịch vụ 7.x-3.x

Bước 1: Đưa ra yêu cầu bài đăng lên user.logintài nguyên với tên người dùng và mật khẩu của bạn.

Nếu đăng nhập thành công, bạn sẽ nhận được một đối tượng phản hồi với 4 thuộc tính:

  • session_name
  • sessid
  • mã thông báo
  • người dùng (đối tượng)

Ảnh chụp màn hình từ google chrome postman Ảnh chụp màn hình từ google chrome postman

Bước 2: Đưa ra yêu cầu bài đăng nodevới 2 tiêu đề

  • Cookie: [session_name] = [sessid]
  • Mã thông báo X-CSRF: [mã thông báo]

Ảnh chụp màn hình từ google chrome postman Ảnh chụp màn hình từ google chrome postman


Tôi đã cố gắng sử dụng <endpoint> /user.login nhưng nó không lặp lại : prntscr.com/gru4y6 - không chắc tôi đang làm gì sai.
Patoshi パ ト

0

Nếu bạn thực hiện POST cho API REST thì bạn sẽ phải đưa mọi thứ vào dữ liệu POST chứ không phải URL . Trong Postman, bạn có thể đặt yêu cầu để đăng, hơn loại x-www-form-urlencodedvà bên dưới để bạn có thể thêm các giá trị dữ liệu của mình. Đừng quên thêm trạng thái, uid, ngôn ngữ, loại, tiêu đề và sau đó là các giá trị bổ sung. URL tài nguyên chỉ nên HOST/REST_API_PATH/node.


1
Ít bối rối. Ok bạn có thể cho tôi biết các tham số để tạo một bài viết mới là gì không? Nếu bạn không phiền, bạn có thể đăng một ví dụ hoặc một liên kết để tôi có thể có một khái niệm rõ ràng!
Ramaraju.d
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.