Services 3.x 및 JSON으로 주석 및 노드 작성


10

/comment.json에 대한 POST를 인식하는 서비스를 얻는 데 문제가 있습니다. 노드 생성과 비슷한 문제가 있습니다.

다음과 같은 오류가 발생합니다. HTTP / 1.1 406 허용되지 않음 : 필수 인수 주석이 없습니다.

이 메시지는 다음 파일에서 제공됩니다. /services/server/rest_server/includes/RESTServer.inc 구체적으로 다음 줄은 다음과 같습니다.

  elseif (!isset($info['optional']) || !$info['optional']) {
    return services_error(t('Missing required argument !arg', array(
      '!arg' => $info['name'],
    )), 406);
  }

기본적으로 "코멘트"인수가 누락 된 것으로 생각됩니다 (선택적 아님).

이것은 내가 준 JSON의 많은 비트 중 하나입니다 (노드 8801에 의견 게시)

{name:"test",language:"und",cid:"0",pid:"0",uid:"17593",nid:"8801",
comment:{subject:"Subject of the comment, if not entered it will be auto-generated",
comment_body:
{und:[
[{value:"value of the field comment in the comment, remember that in D7 we can create fields for comments too", format: "full_html"}]
]}}}

다른 온라인 JSON 검사를 기반으로 완벽하게 유효합니다. 또한 /services/test/functional/ServivesResourceCommentTests.test의 서비스 테스트 예제에서 볼 수있는 것과 일치합니다.

그러나 항상 같은 오류 메시지가 나타납니다. Drupal 7 서비스 json 노드 객체 와 비슷합니다.

이것도 해결되지 않았습니다. 올바른 JSON 형식으로 누군가 나를 도울 수 있습니까? 실제로, 내가하고 싶은 것은 다음과 같이 전달하는 것입니다.

{ nid : 8081 , uid : 17593 ,comment:{comment_body:"test",subject:"test"}}

내 http 헤더가 좋아 보이고 사용자 / 로그인이 제대로 작동했습니다.

답변:


5

다음 JSON은 의견을 게시해야하는 최소값으로 보입니다.

{
  "nid":"1",
  "subject":"Comment Subject Text",
  "comment_body":{
    "und":[{
      "value":"Comment body text"
    }]
  }
}

사용자가 없으므로이 "example.com/node/1"에 댓글을 달고 익명 사용자가 댓글을 게시 할 수있는 권한을 설정해야합니다.


2

인증없이 노드 / 설명을 만들려고했지만 익명 사용자가 노드 / 설명을 만들도록 허용하지 않았습니다. 세션 인증을 켜고 올바르게 로그인하면 문제가 해결되었습니다.


1
Drupal 서비스 또는 REST 클라이언트에서 세션 인증을 설정 했습니까? 어떻게했는지에 대한 간단한 팁을 줄 수 있습니까?
ted.strauss

2

이 json 문자열을 게시 할 URL을 알려주십시오. 서비스 3을 사용하여 노드에 주석을 작성하는 방법에 대한 문서를 웹에서 찾아 봤습니다.이 모듈의 문서가 완전히 부족합니다. 나는 다음을 게시하려고 시도했다.

example.com/api/node/{nid}/comments.json

example.com/api/comment.json

example.com/api/comment/create.json

아무것도 작동하지 않는 것 같습니다. "404 Not Found : 컨트롤러를 찾을 수 없습니다"라는 메시지가 항상 나타납니다.

편집 : 이것을 게시하자마자 작동하게되었습니다. 다른 사람에게 도움이된다면 json 문자열을 다음에 게시하십시오.

example.com/api/comment.json

포스터를 사용하여 테스트하는 경우 컨텐츠 유형을 application / json으로 설정해야합니다. jquery를 사용할 때 dataType : 'json'을 설정하십시오.


2

다음은 노드 및 주석을 작성하고 다음 형식으로 업데이트하는 몇 가지 예입니다.

  • HTTP 메소드
  • 컨텐츠 타입
  • URL 경로
  • 전송할 데이터

노드 생성

  • 게시하다
  • ContentType : 응용 프로그램 / json
  • ? q = endpoint / node.json

    { "type": "article", "title": "t8yZUfX2it", "language": "und"}

노드 업데이트

  • 놓다
  • ContentType : 응용 프로그램 / json
  • ? q = endpoint / node / 123.json

    { "node": { "nid": "123", "title": "9AjrXJhWMI", "language": "und"}}

댓글 작성

  • 게시하다
  • ContentType : 응용 프로그램 / json
  • ? q = endpoint / comment.json

    { "제목": "liJmJfpqMX", "comment_body": { "und": [{ "value": "9DyaNZi3lA"}]}, "nid": "18"}

댓글 업데이트

  • 놓다
  • ContentType : application / x-www-form-urlencoded
  • ? q = endpoint / comment / 456.json

    {cid : 456, "제목": "hzU27R6daE", "comment_body": { "und": [{ "value": "BqZU5DwArD"}]}, "nid": "18"}


1
이것은 잘 작동합니다. 허용되는 답변이어야합니다! Chrome postman에서 테스트하는 경우 키에 "Content-Type"value : "application / json"키를 추가해야합니다. 이것은 또 다른 귀중한 자료입니다 : https://www.drupal.org/node/1447020
longboardnode

1

파이어 폭스 플러그인 포스터로 테스트 할 때도 비슷한 문제가 발생했습니다. 그것은 단순히 여분의 공백과 그것을하고있는 다른 간단한 서식 (예 : 이스케이프)이었습니다. 다음은 필요한 테스트를 수행하는 데 필요한 목록입니다.

사용자 작업 생성 = 엔드 포인트 / 사용자

{"name":"myusername","pass":"12345678","mail":"myemail@example.com","status":"1"}

로그인 작업 = 엔드 포인트 / 사용자 / 로그인

{"username":"admin","password":"admin"}

파일 작업 생성 = 엔드 포인트 / 파일

{"uid":"1","filesize":"99999","filename":"whatever.bin","file":"BASE64_ENCODED_DATA"}

노드 작동 작성 = 엔드 포인트 / 노드

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.